从图像中读取十六进制数据的问题 - python 自动转换为字符串

2 投票
5 回答
3151 浏览
提问于 2025-04-16 07:28

我正在用 read(1) 一次读取一个字节的方式来读取一张图片,并把它添加到一个列表里。这个图片的数据都是十六进制的。当我用 print 函数打印这个列表时,它的格式是 '\xd7'

['\xd7', '\xd7', '\xd7', '\xd7', '\xd7', '\xd7', '\xd7',...]

问题是,现在我需要对这些十六进制数据进行一些计算,但它们是字符串格式,而这种 '\xd' 的字符串格式在 Python 中没有被任何整数或十六进制转换函数支持。它们需要的是 '0xd7' 或者只是 'd7'

谢谢你的帮助

5 个回答

2

你可以像这样把它们放进一个数字数组里:

import array

data = array.array('B') # array of unsigned bytes

with open("test.dat", 'rb') as input:
    data = input.read(100)
    data.fromstring(data)

print data
# array('B', [215, 215, 215, 215, 215, 215, 215])
4

它把这些当成字符来理解,所以你需要用ord这个函数把它们转换成数字。比如说,ord('\xd7')会返回215这个数字。

另外,如果你在使用Windows系统,或者这个程序可能要在Windows上运行,记得要以二进制模式打开文件:open("imagefile.png","rb")。在其他操作系统上这样做就没什么区别。

2

如果你需要的是 'd7''0xd7',而不仅仅是 0xd7(也就是215),那么可以使用 hex() 函数或者 '%x' 格式。

>>> ord('\xd7')
215
>>> ord('\xd7') == 215 == 0xd7
True
>>> hex(ord('\xd7'))
'0xd7'
>>> '%x' % ord('\xd7')
'd7'

另外,正如其他回答中提到的,确保在模式中以 'b' 开头,否则在某些字节序列上,它可能会搞混,误认为是UTF-8之类的格式。

撰写回答