我正在写一个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 属性,耐力没有帮助。任何帮助将不胜感激。