To może być głupie pytanie, ale nie mogłem znaleźć dobrej odpowiedzi w dokumentach lub w dowolnym miejscu.Jak pakować i rozpakowywać za pomocą ctypów (Structure <-> str)
Jeśli używam struct zdefiniować strukturę binarną, struct ma 2 symetryczne metody serializacji i deserializacji (pakiet i rozpakować), ale wydaje się, ctypes nie ma prostego sposobu, aby to zrobić. Oto moje rozwiązanie, które jest błędne:
from ctypes import *
class Example(Structure):
_fields_ = [
("index", c_int),
("counter", c_int),
]
def Pack(ctype_instance):
buf = string_at(byref(ctype_instance), sizeof(ctype_instance))
return buf
def Unpack(ctype, buf):
cstring = create_string_buffer(buf)
ctype_instance = cast(pointer(cstring), POINTER(ctype)).contents
return ctype_instance
if __name__ == "__main__":
e = Example(12, 13)
buf = Pack(e)
e2 = Unpack(Example, buf)
assert(e.index == e2.index)
assert(e.counter == e2.counter)
# note: for some reason e == e2 is False...
który wygląda o prawo do mnie. ctypes nie służy do serializacji, więc fakt, że można to zrobić w 7 liniach kodu, wydaje się całkiem niezły. –