2015-08-09 67 views
0

將int轉換爲Big-Endian編碼的2個十六進制字節時出現問題。將int轉換爲Big-Endian的2個字節

例如:

import struct 

a = 1234 
struct.pack('>I', a) 

我收到的是:

'\x00\x00\x04\xd2' 

我希望收到的(2個字節十六進制):

'0x04', '0xd2' 

我不知道如何得到這個結果,我嘗試了不同的切割和移動技術,以便從每4個數字積分中獲得我希望得到的結果呃但有時候0會干擾正確的結果。

接收big-endian編碼整數的2字節十六進制值的正確方法是什麼?

感謝

回答

1

使用>Hformat string; Python 2中的示例:

>>> import struct 
>>> a = 1234 
>>> s = struct.pack('>H', a) 

然後解壓縮它;

>>> first, second = struct.unpack('>BB', s) 
>>> first 
4 
>>> second 
210 

如果您正在使用Python 3,你可以使用to_bytes

In [1]: a = 1234 

In [2]: a.to_bytes(2, 'big') 
Out[2]: b'\x04\xd2' 

In [3]: b = bytearray(a.to_bytes(2, 'big')) 

In [4]: b[0] 
Out[4]: 4 

In [5]: b[1] 
Out[5]: 210 
+0

我認爲這將是一個加點給的什麼都格式的簡短說明。 –

+0

嘿,我試過這樣做,當我將這個結構命令附加到一個變量並打印它時,我得到了一個奇怪的圖片而不是「\ x0d \ xd2」。此外,我想接收輸出爲2個字節。0x04和0xd2 – wannabebetter

+0

簡短描述可以在'struct'模塊的官方文檔中找到,我已經添加了一個鏈接。一個真實的解釋需要一個重要的歷史課程。 :-) –