我正在尝试将 socket.inet_pton 返回的 16 字节数据 blob 转换为无符号字节的 ctypes 数组。我的数据结构如下所示:
class in6_addr(ctypes.Structure): _fields_ = (("Byte", ctypes.c_ubyte * 16),)
这个 Blob 就是:
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
有什么想法我需要转换成什么类型吗?
最佳答案
我在这里可能完全错误(而且看起来确实有点复杂),但这对我有用:
sin6.Byte = (ctypes.c_ubyte*16)(*list(bytearray(data)))
我必须将数据转换为整数列表并为构造函数解压它们。一定有更简单的方法!
关于python - 在 Python ctypes 中转换为数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3288219/