如何将一串数字转换回二进制十六进制(\ x值)类型?

时间:2017-07-21 20:53:36

标签: python python-3.x

编辑:

以下代码是以二进制模式读取文件(本例中的图像):

with open("img_80px.png", mode='rb') as file:
    file_content = file.read()
    binary_data = []
    for i in file_content:
        binary_data.append(i)

现在,打印file_content将为我们提供二进制b' '格式的十六进制值字符串:

b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00P\x00\x00\x00<
\x08\x06\x00\x00\x00\xf1\'=\x8c\x00\x00\x00\tpHYs\x00\x00\x0fa
\x00\x00\x0fa\x01\xa8?\xa7i\x00\x009\xeeiTXtXML:com.adobe.xmp
\x00\\x00\x00\x00\x00<?xpacket begin="\xef\xbb\xbf" id="W5M0MpCehiHzreSzNTczkc9d"?> 
\n<x:xmpmeta xmlns:x="adobe:ns:meta/" 
x:xmptk="Adobe XMP Core 5.6-c138 79.159824, 2016/09/14-01:09:01 

 ....'

因此,代码通过file_content将这个二进制字符串转换为数字列表,并将每个位附加到binary_data(不确定它是否是最好的方式,不确定为什么它甚至可以工作),所以我们得到了这个:

[137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13 ....]

问题是,如何将此列表重新转换为b''十六进制二进制字符串或其他任何内容?如您所见,它具有\x值和纯文本元数据。不知道如何将其转换回来。

如果这种转换方式不同,你能否提出另一种方法将二进制转换为整数字符串并返回?

我试过这样做:

binary_data_string = "".join(map(str, binary_data))

with open("edited_img_80px.png", mode='wb') as edited_file: 
    binary_hex = bytes.fromhex(binary_data_string)
    edited_file.write(binary_hex)

它会抛出错误:

ValueError: non-hexadecimal number found in fromhex() arg at position 58313

我还尝试不将其转换为字符串以保留列表中每个转换项的信息,并能够将其转换回二进制文件,但我得到:

TypeError: fromhex() argument must be str, not list

1 个答案:

答案 0 :(得分:2)

由于您使用的是Python 3,因此可以执行此操作:

>>>numbers = [222, 173, 190, 239]
>>>bytes(numbers)
b'\xde\xad\xbe\xef'

干杯!