1

我正在阅读一个看起来像这样的文件:

0025be60  24 b3 10 80 00 b4 10 80  a4 b4 10 80 08 b5 10 80  |$...............|
0025be70  94 b5 10 80 9c b7 10 80  40 b9 10 80 e4 b9 10 80  |........@.......|
0025be80  e0 bf 10 80 94 c0 10 80  f4 cc 10 80 54 cd 10 80  |............T...|
0025be90  44 d9 10 80 88 d9 10 80  30 da 10 80 88 db 10 80  |D.......0.......|
0025bea0  44 dc 10 80 d0 e3 10 80  6c e6 10 80 d0 e8 10 80  |D.......l.......|

但我很难将其转换为十六进制变量数组。我想要以下内容:

x = [0x24b31080, 0x00b41080, 0xa4b41080, 0x08b51080 ...

但我有一个问题。我认为 file_contents.unpack("H8*) 会起作用,但这只会返回第一个值......那里有解包专家吗?

4

1 回答 1

1

您将不得不更多地转换数据。一种方法是gsub在输入流上使用以删除空格。这在此处进行了说明:

lines.collect do |line|
  line.gsub(/ /, '').unpack('H8H8H8')
end

如果您想忽略该行的一部分,您总是可以更好地确定它的范围:

lines.collect do |line|
  line[10, 48].gsub(/ /, '').unpack('H8H8')
end.flatten

这需要从字符串中偏移量 10 开始的 48 个字符并将其解包。最后flatten将两级数组结构转换为单级。

于 2011-10-19T21:42:51.853 回答