2012-12-29 77 views
-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中無法正常工作。我應該如何修改這段代碼?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

定義 「不正常」 –

+0

文件「d模塊:\ pkmfile_web \ pkmtohex.py 」,第12行,在bintohex hexvalue.append( 「%02X」 %(ORD(buffhex [I]))) 類型錯誤:ORD()預期長度爲1的字符串,但INT發現 –

+0

添加該信息來問題本身。 –

回答

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') 
+0

非常感謝!有用 –

2

有針對:-)

>>> import binascii 
>>> binascii.hexlify(b'abc') 
'616263'