Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我在由 Perl 脚本解析的日志文件中有一堆数字表示为十六进制字符串,而且我对 Perl 相对缺乏经验。
其中一些数字实际上是有符号负数,即0xFFFE == -2表示为 16 位有符号整数时。
0xFFFE == -2
有人可以告诉我从 Perl 中的字符串中获取该数字的签名表示的规范方法FFFE,或者将我指向教程或其他资源吗?
FFFE
您可以使用hex()函数将十六进制转换为十进制,但它将输入解释为无符号值。为了弥补这一点,将十进制值打包为无符号数量并将其解包为有符号数量:
my $num = unpack('s', pack('S', hex('FFFE')));
's' 和 'S' 模板分别用于有符号和无符号 16 位量。pack有关其他模板和使用信息,请参阅该函数的文档。
pack
print unpack('s>', pack('H4', 'FFFE')); -2