def bintohex(path):
hexvalue = []
file = open(path,'rb')
while True:
buffhex = pkmfile.read(16)
bufflen = len(buffhex)
if bufflen == 0: break
for i in range(bufflen):
hexvalue.append("%02X" % (ord(buffhex[i])))
我正在创建一个函数,它将返回特定文件的十六进制值列表。但是,此功能在Python 3.3中无法正常工作。我该如何修改此代码?
File "D:\pkmfile_web\pkmtohex.py", line 12, in bintohex hexvalue.append("%02X" % (ord(buffhex[i]))) TypeError: ord() expected string of length 1, but int found
答案 0 :(得分:2)
有一个模块: - )
>>> import binascii
>>> binascii.hexlify(b'abc')
'616263'
答案 1 :(得分:1)
在Python 3中,索引bytes
对象返回整数值;无需致电ord
:
hexvalue.append("%02X" % buffhex[i])
此外,无需手动循环索引。只需遍历bytes
对象。我还修改了它以使用format
而不是%
:
buffhex = pkmfile.read(16)
if not buffhex:
for byte in buffhex:
hexvalue.append(format(byte, '02X'))
您甚至可能想要bintohex
生成器。为此,您可以启动yield
值:
yield format(byte, '02X')