考虑到我需要确保以非常特定的方式将类/结构映射到内存的情况,可能是由于需要匹配外部协议:
[StructLayout(LayoutKind.Sequential, pack=1)]
public class SYSTEM_INFO
{
public ulong OemId;
public ulong PageSize;
public ulong ActiveProcessorMask;
public ulong NumberOfProcessors;
public ulong ProcessorType;
}
然后我考虑做一个'覆盖'(这是一个恰当的词吗?),所以我可以直接访问内存:
[StructLayout(LayoutKind.Explicit)]
public class SYSTEM_INFO
{
[FieldOffset(0)] public byte Buffer[40]; //overlays all the bytes, like a C union
[FieldOffset(0)] public ulong OemId;
[FieldOffset(8)] public ulong PageSize;
[FieldOffset(16)] public ulong ActiveProcessorMask;
[FieldOffset(24)] public ulong NumberOfProcessors;
[FieldOffset(32)] public ulong ProcessorType;
}
但是这很耗时且容易出错(如果发生某些更改,我很容易将所有FieldOffset
值更新为混乱)
是否可以将Buffer
覆盖成员,但所有成员except Buffer
自动且顺序对齐而无需填充的两种方法进行组合?我不能从文档中看出是否允许这样做,并且我可以强制某些成员偏移,而其他成员则自动确定。
对于struct
,您可以非常轻松地进行-坦率地说,如果您要查看字节,则应该[[通常