2016-12-14 102 views
1

我對Python不熟悉,我需要將端口從2.7更改爲3.5。 在2.7:從Python 2.7到Python 3.5端口unhexlify

>>> unhexlify('2FE2')[0] 
'/' 

在3.5:

>>> str(unhexlify('2FE2'))[0] 
'b' 

或:

>>> unhexlify('2FE2')[0] 
47 

我已經嘗試使用

>>> bytes.fromhex('2FE2')[0] 
47 
>>> decode_hex('2FE2')[0][0] 
47 

我只是不能得到正確ascii。我碰到Python使用表示:B」 ...或總是得到一個int

由於

回答

2

unhexlify返回bytes對象和索引爲bytes對象產生在Python 3的整數(一個bytes對象持有0-255範圍內的整數序列)。

如果您想獲得其他bytes對象,使用切割代替:

unhexlify('2FE')[:1] 

這個工作在兩個Python 2和3

+0

從我所看到的,Python 3的對象中的「類型增加「在索引0上,因此」b「標識一個字節數組。我的理解是否正確?如果是這樣,爲什麼,對我沒有意義。 切片只是刪除「B」?我很困惑 –

+0

@TheSingularity_:你正在混淆字符串文字符號。你可以用'b'...''文字符號創建一個'bytes'對象,所以'bytes([102,111,111])'和'b'foo''產生相同的值。當你在這個對象上使用'repr()'或'str()',或者在使用'repr()'和'str()'的一個對象上使用'print'分別),那麼Python會爲您生成'b'....''語法,因此您可以輕鬆地重現該值。只需複製輸出,將其粘貼到Python代碼中,然後再次擁有相同的內容。 –

+0

@TheSingularity_:所有*語法*然而。切片適用於*值*,而不是語法。 'b'和引號不是價值的一部分。所以'bytesobject [:1]'將會創建一個新的'bytes'對象,其中包含片段指示的字節。對於返回'b'f''的'b'foo',即第一個字節。 –