2017-06-29 130 views
0

我有一個hexa字符串,我想要轉換爲int的numpy數組。Python解碼十六進制字符串上的意外行爲

我不想使用for循環,因爲不建議通過numpy數組循環。

所以我做到以下幾點:

vector = np.fromstring(s.decode('hex'), dtype=np.uint8)

例如如果s = 'a312's.decode('hex')回報'\xa3\x12'這是正確的。

但是,如果s = 'a320',s.decode('hex')返回'\xa3 '這看起來有點奇怪,因爲我期待'\xa3\x20'

你能幫我嗎?

回答

1

問題是Pyhon中的一個二進制字符串是,它代表,因爲它的等同於ASCII碼

相當於'\x20'是一個空間,作爲一個可以在ASCII table看到:

Hex Dec ASCII 
20 32 (space) 

如果在終端編寫'\x20',它將打印一個空格:

>>> '\x20' 
' ' 
>>> 'a320'.decode('hex') == '\xa3\x20' 
True 

請注意,這只是方面的表示:幕後,二進制字符串包含0010 0000二進制值。

+0

好吧,我明白了。我猜可能'decode'不是我所需要的。 如何從s ='a320'獲得''\ xa3 \ x20''? – SebMa

+0

@SebMa:你仔細閱讀了答案嗎?你會得到'\ xa3 \ x20'。這是一個**字符串如何表示**的問題。 –

+0

你是對的,這是一天結束,我開始厭倦。 'decode()'做了我想要的結果,我得到了預期的整數值:'np.fromstring('\ xa3',dtype = np.uint8)[ – SebMa

相關問題