我正在编写一个使用ctypes.Structure
来序列化数据并通过网络发送数据的应用程序。
所以我使用_pack_ = 1
删除那些讨厌的填充字节,这有效。
from ctypes import *
class A(Structure):
_fields_ = (
('a', c_uint8),
('b', c_uint16),
)
sizeof(A) == 4 # yep, expected that... 'a' takes up 2 bytes
class B(Structure):
_pack_ = 1
_fields_ = (
('a', c_uint8),
('b', c_uint16),
)
sizeof(B) == 3 # also good, 'a' now occupies 1 byte only
但是,我希望根据其他条件应用打包,但内容相同(同一_fields_
)。
所以我试过......
class C(A):
_pack_ = 1
sizeof(C) == 4 # wait, what? Shouldn't this == 3
我的实际实施需要是动态的,所以我使用:
D = type(A.__name__, (A,), {'_pack_': 1})
sizeof(D) == 4 # same result as class C
任何人都可以提供一些这方面的智慧吗?