0

行あたり 16 ビットの 16 進数のバイナリ ファイルがあります。3バイトだけを抽出し(すでに行っています)、10進数値に変換して昇順に並べ替え、16進数値に再変換してバイナリファイルに保存する必要があります。

4

2 に答える 2

0

追加情報に基づいて回答を更新しています。コンテキスト、データセットのサイズなどのアイデアを提供しなかったため、これがニーズに適しているかどうかはわかりません.

それが唯一の答えではなく、それが最良の答えであると主張しているわけではありませんが、それは機能し、少なくともあなたが取り組むことができるものになるでしょう.

fi = open('myinput.dat', 'rb')
fo = open('myoutput.dat', 'wb')

out_list = []

bytes_in = fi.read(3)
while bytes_in != '':
    print bytes_in
    out_list.append( bytearray([bytes_in[1], bytes_in[0], bytes_in[2]]) )
    print out_list
    bytes_in = fi.read(3)

out_list.sort()

for bytes_out in out_list:
    fo.write(bytes_out)

fo.close()   
fi.close()

これは、次のようなデータセットを取ります。

Hexadecimal:      |  ASCII
0x61 0x62 0x63    |  abc
0x31 0x32 0x33    |  123
0x41 0x42 0x43    |  ABC

そして出力します:

Hexadecimal:   |  ASCII
0x32 0x31 0x33 |  213
0x42 0x41 0x43 |  BAC
0x61 0x62 0x63 |  bac

それはあなたが探しているものですか?

于 2013-08-11T08:57:16.787 に答える
0

読み取り可能な形式の 16 進バイトがある場合は、10 進値をソートのキーとして使用します。

hlist.sort(key=lambda x: int(x, 16))

生の 16 進バイトがあり、それらがすべて同じ長さである場合、バイト文字列は自然にソートされるため、明示的なキーは必要ありません。

hlist.sort()
于 2013-08-11T00:13:42.260 に答える