2013-01-25 21 views
1

我試圖解開字節蟒蛇: -如何在Python中使用結構模塊解壓字節?

import struct 


c_struct_exp='struct lokesh { int i=5;} lm;' 
result=struct.unpack('!i',bytes(c_struct_exp,'utf-8')) 
print(result) 

錯誤:

struct.error: unpack requires a bytes object of length 4 

請幫我在解壓縮方法的格式字符串表達式。

回答

3

unpack用於拆包二進制數據,不是C源代碼。要遵循您的單個整數成員結構的示例:

>>> from struct import * 
>>> pack('i', 134) 
'\x86\x00\x00\x00' 
>>> unpack('i', '\x86\x00\x00\x00') 
(134,) 
>>> 
+0

我沒有直接使用C源代碼。我將c源代碼轉換爲原始字節: - 在使用它解包方法之前,將字節(c_struct_exp,'utf-8')轉換爲.. –

+0

嘗試打印'bytes(...)'調用的輸出 - 它仍然是*源代碼*。 '解壓縮'解碼一個結構的內存映像*,而不是它的源描述。 –

+0

okk :)得到它...其實我試圖解碼從C客戶端在服務器端(python接收端)的C結構數據包..我怎麼能解碼解壓接收到的原始字節(C結構,這是內存圖像,而不是客戶端的源代碼)...我如何解壓上述類型的結構: - 'typedef struct packet {int command; union {struct {int data [100]; int ttl [100];}; struct {char config [256]; };};} myPacketStruct;' –

相關問題