perl - perl 中的十六进制转储解析

标签 perl parsing hexdump

我在一个文件中有一个消息的十六进制转储,我想将它放入一个数组中
所以我可以对其执行解码逻辑。
我想知道这是否是解析看起来像这样的消息的更简单的方法。

37 39 30 35 32 34 35 34 3B 32 31 36 39 33 34 35
3B 32 31 36 39 33 34 36 00 00 01 08 40 00 00 15
6C 71 34 34 73 69 6D 31 5F 33 30 33 31 00 00 00
00 00 01 28 40 00 00 15 74 65 6C 63 6F 72 64 69
74 65 6C 63 6F 72 64 69



请注意,任何行上的数据最多可以是 16 个字节。但是任何行也可以包含更少的字节(最小 :1 )
有没有一种漂亮而优雅的方式而不是在 perl 中一次读取 2 个字符?

最佳答案

我会一次读一行,去掉空格,然后使用 pack 'H*'转换它。在不知道您尝试应用哪种“解码逻辑”的情况下,很难更具体。例如,这是一个将每个字节转换为十进制的版本:

while (<>) {
  s/\s+//g;
  my @bytes = unpack('C*', pack('H*', $_));
  print "@bytes\n";
}

示例文件的输出:
55 57 48 53 50 52 53 52 59 50 49 54 57 51 52 53
59 50 49 54 57 51 52 54 0 0 1 8 64 0 0 21
108 113 52 52 115 105 109 49 95 51 48 51 49 0 0 0
0 0 1 40 64 0 0 21 116 101 108 99 111 114 100 105
116 101 108 99 111 114 100 105

关于perl - perl 中的十六进制转储解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3411500/

相关文章:

perl - 如何在 Perl 中使用 Bless 运算符?

mysql - Perl DBIx::Class::ResultSet 不同值

regex - Perl 程序使用引用、哈希表和 sub 来模拟限制 enzyme

c++ - 解析数字字符串

linux - 将 hexdump 转换为字节序列

regex - 无法识别的转义\m 在 PERL 的正则表达式错误中通过

c++ - Bison C++ 中间规则值因变体而丢失

regex - key :value pairs 的 Scala 正则表达式解析器

c - 串行应用程序将 "0D"写为 "0A"

C - 十六进制值 0x00 未写入文件