【发布时间】:2022-10-24 07:51:52
【问题描述】:
我想创建一个这样的结构:
import ctypes
class MyStruct(ctypes.Structure):
_fields_ = [('field1', /* size of 16 bytes */),
('field2', /* size of 4 bytes */)
('field3', /* size of 8 bytes */)]
对于这些大小的字段,我需要在这里写什么类型?我希望field1 的最大大小为 16 个字节,因此所需的值将被写入那里,并且所有其他字节将为零(如有必要,最多 16 个字节)。对于field2 和field3 也是如此。
【问题讨论】:
-
你想如何使用这个结构?
-
例如,
ctypes.c_char * 16,如果你想在 C 中与char field1[16]等效。最好展示你在 C 中对结构所做的操作。 -
你不需要
ctypes来使用struct.pack。例如,struct.pack('>16sLQ',bytes(range(16)),1,5)将创建一个具有 16 字节、4 字节无符号整数和 8 字节无符号整数的bytes字符串。 -
没有一个 16 字节的整数,所以你必须做一些事情,比如分成两个
c_uint64字段,或者使用n.to_bytes(16,'little')来生成n的 16 字节 little-endian 值。 -
@OlvinRoght 取决于操作系统而不是可移植的。在 Windows 上,
ctypes.c_longdouble的大小为 8。