C# 为什么结构的低层长度要长到4字节?
有一个结构:C# 为什么结构的低层长度要长到4字节?,c#,interop,C#,Interop,有一个结构: [StructLayout(LayoutKind.Sequential)] public struct WAVEFORMATEX { public ushort wFormatTag; public ushort nChannels; public ushort nSamplesPerSec; public uint nAvgBytesPe
[StructLayout(LayoutKind.Sequential)]
public struct WAVEFORMATEX
{
public ushort wFormatTag;
public ushort nChannels;
public ushort nSamplesPerSec;
public uint nAvgBytesPerSec;
public ushort nBlockAlign;
public ushort wBitsPerSample;
public ushort cbSize;
};
public WAVEFORMATEX audioInfo = new WAVEFORMATEX();
为什么Marshal.SizeOf(audioInfo)返回20而不是16?
uint
s喜欢在4字节边界上对齐,因此在nSamplesPerSec
和nAvgBytesPerSec
之间插入一个2字节的填充。我假设其他两个字节在结构的末尾填充,使其总大小也是四个字节的倍数
要防止引入此填充,请将StructLayout
属性的Pack
字段设置为1或2,例如:
[StructLayout(LayoutKind.Sequential, Pack=2)]
// ...
谢谢你,伙计,请看我的另一个问题