perl:如何将十六进制数据解码为整数,字符串?

时间:2010-12-04 23:54:42

标签: perl

支持我有一些使用c代码打印的十六进制原始数据,格式如“%02X” 所以他们看起来像:

\x00\x20\x00\x10\xfd\x02\x10\x00\x00\x00\x00\x20\xff\x02\x10\x00\x00\x00\x00\x00 \x05\x00\x011\x00\x01\x00\n\x00\x0240

我想按照以下格式解码它们:
前两个字节十六进制“\ x00 \ x20”应解码为ushort:
以下两个B十六进制“\ x00 \ x10”应解码为ushort:
以下8B十六进制“\ xfd \ x02 \ x10 \ x00 \ x00 \ x00 \ x00 \ x20”应编码为64位。
以下8B十六进制“\ xff \ x02 \ x10 \ x00 \ x00 \ x00 \ x00` \ x00”应编码为64位;
以下3个字节十六进制应解码为3个字符 ....

如何在perl中实现解码 (顺便说一句,我不明白为什么每个十六进制之间都有反斜杠,是不是应该如何打印出十六进制)?

2 个答案:

答案 0 :(得分:1)

单个字节的

s{\\x(..)}{chr hex $1}eg;。 或只是unpack("v", "\x00\x20");(有关详细信息,请参阅解压缩功能)。

答案 1 :(得分:0)

  1. 解码数据:
    • s/\\x(..)/chr hex $1/eg/;
    • 更好的是,假设您可以控制生成输入的C代码,首先让它输出二进制数据并完全避免这一步骤。
  2. 使用unpack解码组件。