ctypes结构中的数据布局

时间:2019-07-19 23:32:23

标签: python c struct ctypes

我正在写一个ctypes结构,其中包含两个c_int16变量,一个实部和一个虚部。我将此数据输入到外部模块中,此结构的高16位代表实部,而低16位代表虚部,这一点很重要。我这样声明我的结构:

class sample(Structure):
    _fields_ = [("real" c_int16), ("imag", c_int16)]

问题是ctypes似乎颠倒了内存布局,将虚部放在了高16位,将实部放在了低16位。我有一个临时的解决方法,就是反转变量的声明,但是我没有希望将其作为永久解决方案。

为验证确实是ctypes / Python的反向字段,我声明了一个Union结构:

class sampleUnion(Union):
    _fields_ = [("sample", sample),
                ("sample32", c_int32)]

我用一些任意值初始化了一个样本结构,并为其分配了“样本”字段:

x = sample()
x.real = 1
x.imag = 2
y = sampleUnion()
y.sample = x
print(hex(y.sample32))

输出为0x20001,清楚地表明虚部在高16位...

我尝试弄乱 pack 属性,耐力没有帮助。任何帮助将不胜感激。

0 个答案:

没有答案