2012-08-27 49 views
2

我必須將一些代碼轉換爲python。兩者都是32位。我如何驗證?如何在Python中表示一個字節數組?

const char kEncryptionKey[] = { 
     0xb0, 0x8c, 0x70, 0xcf, 0xbc, 0xb0, 0xeb, 0x6c, 0xab, 0x7e, 0x82, 0xc6, 
     0xb7, 0x5d, 0xa5, 0x20, 0x72, 0xae, 0x62, 0xb2, 0xbf, 0x4b, 0x99, 0x0b, 
     0xb8, 0x0a, 0x48, 0xd8, 0x14, 0x1e, 0xec, 0x07 
    }; 
    const char kIntegrityKey[] = { 
     0xbf, 0x77, 0xec, 0x55, 0xc3, 0x01, 0x30, 0xc1, 0xd8, 0xcd, 0x18, 0x62, 
     0xed, 0x2a, 0x4c, 0xd2, 0xc7, 0x6a, 0xc3, 0x3b, 0xc0, 0xc4, 0xce, 0x8a, 
     0x3d, 0x3b, 0xbd, 0x3a, 0xd5, 0x68, 0x77, 0x92 
    }; 

So..in蟒蛇:

kIntegrityKey = ???? 
kEncryptionKey = ???? 
+1

你的問題涉及到你應該如何在Python中表示十六進制數組,或者你是否在擔心有多少字節將用於存儲信息? –

+0

好吧......兩個.....我相信。對不起,不是這方面的專家。我所知道的是我有了鑰匙,C++中的示例鍵看起來像上面那樣。 – Tampa

+0

Humm,好的。我已經用關於每個項目大小的解決方案更新了我的答案。 –

回答

6

你可以存儲在一個列表中的十六進制數字:

kIntegrityKey = [0xbf, 0x77, 0xec, 0x55, 0xc3, 0x01, 0x30, 0xc1, 0xd8, 0xcd, 0x18, 0x62, 
    0xed, 0x2a, 0x4c, 0xd2, 0xc7, 0x6a, 0xc3, 0x3b, 0xc0, 0xc4, 0xce, 0x8a, 
    0x3d, 0x3b, 0xbd, 0x3a, 0xd5, 0x68, 0x77, 0x92] 

,同樣的事情到kEncryptionKey

更新:如果您有關於數據大小的擔憂,可以將數據打包爲array。例如:

>>> import array 
>>> kIntegrityKey = array.array('B', [0xbf, 0x77, 0xec, 0x55, 0xc3, 0x01, 0x30, 0xc1, 
... 0xd8, 0xcd, 0x18, 0x62, 0xed, 0x2a, 0x4c, 0xd2, 0xc7, 0x6a, 0xc3, 0x3b, 0xc0, 0xc4, 
... 0xce, 0x8a, 0x3d, 0x3b, 0xbd, 0x3a, 0xd5, 0x68, 0x77, 0x92]) 
>>> len(kIntegrityKey) 
32 
>>> kIntegrityKey.itemsize 
1 

的第一個參數array'B')表示,我們要存儲使用的unisgned char列表中的第二個參數(您無符號的字符表)。

itemsize屬性在文檔字符串描述爲:

itemsize - 使用\ X特別在一個數組項的字節長度

2

Python字符串可以給予任意的十六進制字符字符。

kIntegrityKey = "\xb0\x8c\x70\xcf ..." 
+1

這僅在Python 2中是真實的。在Python 3中,字符串始終是Unicode,因此使用任意二進制數據時可能會出錯。相反,你可以使用'bytes'類型,它明確地是一個8位值的數組。你也可以使用'字節'文字,通過給出一個「b」前綴,例如'b「\ xb0 \ x8c \ x70 \ xcf ...」' – Blckknght

2

Py3k具有「bytes」型是用於本申請中可能理想的。

注:python 2現在也有bytes類型,但它只是str的別名。

相關問題