2010-07-20 72 views
1

我試圖將socket.inet_pton返回的16字節Blob數據轉換爲無符號字節的ctypes數組。我的數據結構是這樣的:強制轉換爲Python ctypes數組

 
class in6_addr(ctypes.Structure): 
    _fields_ = (("Byte", ctypes.c_ubyte * 16),) 

而且斑點就是:

 
data = socket.inet_pton(socket.AF_INET6, "2001::3") 

然而,這些嘗試得到錯誤:

 
sin6 = in6_addr() 

# TypeError: expected c_ubyte_Array_16 instance, got str 
sin6.Byte = data 
# TypeError: cast() argument 2 must be a pointer type, not c_ubyte_Array_16 
sin6.Byte = ctypes.cast(data, ctypes.c_ubyte * 16) 
# TypeError: incompatible types, LP_c_ubyte instance instead of c_ubyte_Array_16 instance 
sin6.Byte = ctypes.cast(data, ctypes.POINTER(ctypes.c_ubyte)) 

所有代碼:http://codepad.org/2cjyVXBA

任何想法我需要投入什麼類型?

回答

3

我可能會在這裏完全錯誤的(而且似乎有點複雜),但這個工作對我來說:

sin6.Byte = (ctypes.c_ubyte*16)(*list(bytearray(data))) 

我不得不將數據轉換成整數列表,並解壓它們的構造。必須有一個更簡單的方法!

相關問題