Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 使用python将十六进制十进制数转换为十进制数_Python 2.7 - Fatal编程技术网

Python 2.7 使用python将十六进制十进制数转换为十进制数

Python 2.7 使用python将十六进制十进制数转换为十进制数,python-2.7,Python 2.7,我有一个十六进制数的二进制文件,每行16位。我只需要提取三个字节(我已经提取了),然后转换成十进制值,按升序排列,再转换成十六进制值并存储在二进制文件中。如果十六进制字节是可读的,则使用十进制值作为排序键 hlist.sort(key=lambda x: int(x, 16)) 如果您有原始十六进制字节,并且它们的长度都相同,那么您不需要显式密钥,因为ByTestRing自然排序 hlist.sort() 我正在根据你的补充信息更新我的答案。您没有提供上下文、数据集大小的概念等,因此我不确定

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

如果十六进制字节是可读的,则使用十进制值作为排序键

hlist.sort(key=lambda x: int(x, 16))
如果您有原始十六进制字节,并且它们的长度都相同,那么您不需要显式密钥,因为ByTestRing自然排序

hlist.sort()

我正在根据你的补充信息更新我的答案。您没有提供上下文、数据集大小的概念等,因此我不确定这是否适合您的需要

这不是唯一的答案,我也不是说这是最好的答案,但它是有效的,也许它至少会是你可以使用的

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

这就是您要找的吗?

您说您的文件是“二进制”文件,但也包含十六进制(这是一种仅使用字符0-9和a-F的文本格式)。是哪一个?您是否使用十六进制编辑器查看二进制文件,该编辑器将二进制内容显示为十六进制?另外,当你说每行有16位时,“行”是什么意思。文件中是否有换行符或其他二进制分隔符?我在十六进制编辑器中查看文件,因此称为每行16字节。我的文件类似于AA BB CC DD EE FF。。。。在使用十六进制编辑器查看的二进制文件中,一行有16个字段。我需要首先将它们拆分为3个数字,并将它们重新排序为BBAACC,同样的方式拆分并重新排序接下来的3个字节。至少,通过使用三个字节来重新排序整个文件。十六进制数字实际上是AA BB CC的形式,但我希望它每三个字节被重新排序为BB AA CC,然后所有重新排序的字节都以升序排列。所以你希望整个列表被排序,而不是字节?比如,如果你有输入:“AA BB CC 11 22 33 CC FF 3F”,那么输出就会是:“22 33 11 BB AA CC FF CC 3F”这就是你想要的吗?你知道,我对回答这些问题还不太熟悉,也许我有点太想插嘴了,但老实说,我认为你真的应该更具体地说明到底是什么问题,并展示一些你努力的例子,这样我们就可以看到什么问题更好,更好地表明你自己也做了一些努力。事实上,我不知道你的问题是你对文件访问、排序的理解还是什么。帮助我们帮助你。谢谢你的帮助。我有一个二进制文件,带有AA BB CC 11 22 33 CC FF 3F。。。。。。我希望它像(22 11 33)(BB AA CC)(FF CC 3F)的括号只是为了让事情清楚。首先通过将三个字节聚集在一起来分离文件,然后从位置123到213每三个字节重新排序一次,然后按升序对整个文件排序。我想我现在明白了。谢谢。这帮了大忙