作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
下面的代码以二进制模式读取文件(本例中为图像):
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
最佳答案
由于您使用的是 Python 3,因此您可以执行以下操作:
>>>numbers = [222, 173, 190, 239]
>>>bytes(numbers)
b'\xde\xad\xbe\xef'
干杯!
关于python - 如何将一串数字转换回二进制十六进制(\x 值)类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45246559/
我是一名优秀的程序员,十分优秀!