Python ctypes结构包装不能通过继承进行更改

时间:2017-04-01 13:04:12

标签: python struct ctypes packing

我正在编写一个使用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

任何人都可以提供一些这方面的智慧吗?

0 个答案:

没有答案