Я пытаюсь преобразовать 16-байтовый блок данных, возвращаемых socket.inet_pton, в массив 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
Любые идеи, на какой тип мне нужно наложить?