我正在尝试将 a 编组struct
到 abyte[]
然后再返回,但是ArgumentOutOfRangeException
当编组返回到struct
. 这是代码:
public struct Response
{
CommandNumber Command;
ushort EstimatedRoundTripDuration;
}
protected TStruct ByteArrayToStruct<TStruct>(byte[] data) where TStruct : struct
{
TStruct resp = new TStruct();
int size = Marshal.SizeOf(resp);
IntPtr ptr = Marshal.AllocHGlobal(size);
try
{
Marshal.Copy(data, 0, ptr, size);
Marshal.PtrToStructure(ptr, resp);
return resp;
}
finally
{
Marshal.FreeHGlobal(ptr); //cleanup just in case
}
}
问题似乎sizeof(Response)
是 3,Marshal.SizeOf(resp)
而是 4。我知道这些可能并且预计会有所不同,但我为此使用了相当基本的类型struct
。谁能解释为什么尺寸不同?