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.......|

しかし、それを16進変数の配列に変換するのに苦労しています。次のことをお願いします。

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

しかし、問題が発生しています。file_contents.unpack("H8*) が機能すると思っていましたが、最初の値しか返されません...アンパックの専門家はいますか?

4

1 に答える 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は、2 レベルの配列構造を 1 つのレベルに変換します。

于 2011-10-19T21:42:51.853 に答える