這可能是一個愚蠢的問題,但我無法在文檔或任何地方找到好的答案。如何使用ctypes打包和解包(結構<-> str)
如果我使用結構定義一個二元結構,該結構具有系列化和反序列化2層對稱的方法(包並解壓),但它似乎ctypes的沒有一個簡單的方法來做到這一點。這是我的解決方案,感覺不對:
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...
這看起來對我的權利直寫最快的。 ctypes不是用於序列化的,所以你可以在7行代碼中做到這一點,事實上它確實很不錯。 – 2009-12-01 12:17:00