问题描述
我正在尝试使用构造库解析 python 中的 c 结构 这是我的结构:
typedef struct _MACHINEID {
UINT32 ui32Hash;
DWORD dwLength;
DWORD dwMemoryLoad;
DWORDLONG ullTotalPhys;
DWORDLONG ullAvailPhys;
DWORDLONG ullTotalPageFile;
DWORDLONG ullAvailPageFile;
DWORDLONG ullTotalVirtual;
DWORDLONG ullAvailVirtual;
DWORDLONG ullAvailExtendedVirtual;
} MACHINEID,* PMACHINEID;
from construct import Int32un,Int8sn,Int16un,Int64un,Int
from construct import Array,Struct
MACHINE_ID = Struct(
'ui32Hash' / Int32un,'dwLength' / Int32un,'dwMemoryLoad' / Int32un,'ullTotalPhys' / Int64un,'ullAvailPhys' / Int64un,'ullTotalPageFile' / Int64un,'ullAvailPageFile' / Int64un,'ullTotalVirtual' / Int64un,'ullAvailVirtual' / Int64un,'ullAvailExtendedVirtual' / Int64un
)
但是当我在 python 中接收结构体作为字节对象时,所有 DWORDLONG
成员的值都不正确。有谁知道这是什么原因造成的?
解决方法
正如“一些程序员老兄”所暗示的那样,它与填充有关。将 __pragma(pack(push,1))
和 __pragma(pack(pop))
放在我的结构周围以禁用填充可以解决问题。