Я пытаюсь выстроить struct
к byte[]
, а затем обратно, но я получаю ArgumentOutOfRangeException
когда сортировочной обратно struct
. Вот код:Struct SizeOf/Marshal.SizeOf изменение
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
. Может ли кто-нибудь пролить свет на то, почему размеры разные?
Они могут быть и, как ожидается, будет отличаться. Ответил [здесь] (http://stackoverflow.com/questions/3361986/how-to-check-the-number-of-bytes-consumed-by-my-structure/3362736#3362736). –