我有一个二进制文件,每行16位,每位十六进制数。我只需要提取三个字节(我已经完成了)并转换为十进制值并按升序排列它们并将它们重新转换为十六进制值并存储在二进制文件中。
答案 0 :(得分:0)
如果你有可读形式的十六进制字节,那么使用十进制值作为排序的键。
hlist.sort(key=lambda x: int(x, 16))
如果你有原始十六进制字节并且它们的长度都相同,那么你就不需要一个显式键,因为bytestrings会自然排序。
hlist.sort()
答案 1 :(得分: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
这就是你要找的东西吗?