-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])))

特定のファイルの 16 進値のリストを返す関数を作成しています。ただし、この関数は 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 に答える