-3
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
4

2 回答 2

2

有一个模块:-)

>>> import binascii
>>> binascii.hexlify(b'abc')
'616263'
于 2012-12-29T07:05:06.447 回答
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')
于 2012-12-29T05:05:41.703 回答