标签: perl parsing numbers signed
我有一堆数字表示为日志文件中的十六进制字符串,这些数字由Perl脚本解析,而且我对Perl相对缺乏经验。
这些数字中的一些实际上是带符号的负数,即0xFFFE == -2表示为16位有符号整数时。
0xFFFE == -2
有人可以告诉我从Perl中的字符串FFFE获取此编号的签名表示的规范方法,或以其他方式指向教程或其他资源吗?
FFFE
答案 0 :(得分:21)
您可以使用hex()函数将十六进制转换为十进制,但它会将输入解释为无符号值。要对此进行补偿,请将十进制值打包为无符号数量,然后将其解压缩为已签名的数据:
my $num = unpack('s', pack('S', hex('FFFE')));
's'和'S'模板分别用于有符号和无符号16位数量。有关其他模板和使用信息,请参阅pack函数的文档。
pack
答案 1 :(得分:1)
print unpack('s>', pack('H4', 'FFFE')); -2