11

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

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

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

4

2 回答 2

21

您可以使用hex()函数将十六进制转换为十进制,但它将输入解释为无符号值。为了弥补这一点,将十进制值打包为无符号数量并将其解包为有符号数量:

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

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

于 2010-01-21T18:41:47.467 回答
1
print unpack('s>', pack('H4', 'FFFE'));
-2
于 2012-04-25T09:12:59.640 回答