在Perl中将字符串中的十六进制数转换为负数

Ale*_*all 11 perl parsing signed numbers

我有一堆数字表示为日志文件中的十六进制字符串,由Perl脚本解析,而且我对Perl相对缺乏经验.

这些数字中的一些实际上是带符号的负数,即0xFFFE == -2表示为16位有符号整数时.

有人可以告诉我从FFFEPerl中的字符串中获取此数字的签名表示的规范方法,或以其他方式指向我的教程或其他资源吗?

Mic*_*man 21

您可以使用hex()函数将十六进制转换为十进制,但它将输入解释为无符号值.要对此进行补偿,请将十进制值打包为无符号数量并将其解压缩为已签名的数量:

my $num = unpack('s', pack('S', hex('FFFE')));
Run Code Online (Sandbox Code Playgroud)

's'和'S'模板分别用于有符号和无符号16位数量.有关pack其他模板和用法信息,请参阅该功能的文档.

  • 我希望更多的人知道包装.这是一个非常棒的工具.:) (4认同)