Python 3.3二进制到十六进制函数

时间:2012-12-29 05:03:54

标签: python python-3.x binary hex

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

2 个答案:

答案 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')