我有一堆表示为在日志文件中十六进制字符串正在由Perl脚本解析的数字,并且我比较用Perl没有经验。

一些这些号码时作为16位有符号整数表示的实际签名负数,即0xFFFE == -2

有人可以告诉我从Perl中字符串FFFE得到这个数字的符号表示的规范方式,或以其他方式指向我的教程或其他资源?

有帮助吗?

解决方案

可以使用十六进制()函数从十六进制转换为十进制的,但它解释输入为一个无符号的值。以补偿,包十进制值为一个无符号的数量和它解为有符号之一:

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

在“s”和“S”模板符号和无符号的16位数量时,分别为。参见文档用于其它模板和使用信息的 pack 功能。

其他提示

print unpack('s>', pack('H4', 'FFFE'));
-2
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top