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