python 构建结构无效的 DWORD LONG 值
python construct struct invalid DWORDLONG vallues
我正在尝试使用构造库在 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))
以禁用填充解决了这个问题。
我正在尝试使用构造库在 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))
以禁用填充解决了这个问题。