有结构:
[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?
答案 0 :(得分:2)
uint
喜欢在4字节边界上对齐,因此在nSamplesPerSec
和nAvgBytesPerSec
之间插入一个2字节的填充。我假设其他两个字节在结构的末尾填充,使其总大小也是四个字节的倍数。
要防止引入此填充,请将Pack
属性的StructLayout
字段设置为1或2,例如:
[StructLayout(LayoutKind.Sequential, Pack=2)]
// ...