0

我有一个二进制文件,每行 16 位十六进制数。我只需要提取三个字节(我已经完成了)并转换为十进制值并按升序排列它们并将它们重新转换为十六进制值并存储在二进制文件中。

4

2 回答 2

0

如果您有可读形式的十六进制字节,则使用十进制值作为排序的键。

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

如果您有原始的十六进制字节并且它们的长度都相同,那么您不需要显式密钥,因为字节串自然排序。

hlist.sort()
于 2013-08-11T00:13:42.260 回答
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 回答