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

时间:2010-01-21 18:33:52

标签: perl parsing numbers signed

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

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

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

2 个答案:

答案 0 :(得分:21)

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

my $num = unpack('s', pack('S', hex('FFFE')));

's'和'S'模板分别用于有符号和无符号16位数量。有关其他模板和使用信息,请参阅pack函数的文档。

答案 1 :(得分:1)

print unpack('s>', pack('H4', 'FFFE'));
-2