Попробуй это. Я проверил, и это работает:
struct MyStruct
{
public int i1;
public int i2;
}
private static unsafe MyStruct[] GetMyStruct(Byte[] buffer)
{
int count = buffer.Length / sizeof(MyStruct);
MyStruct[] result = new MyStruct[count];
MyStruct* ptr;
fixed (byte* localBytes = new byte[buffer.Length])
{
for (int i = 0; i < buffer.Length; i++)
{
localBytes[i] = buffer[i];
}
for (int i = 0; i < count; i++)
{
ptr = (MyStruct*) (localBytes + sizeof (MyStruct)*i);
result[i] = new MyStruct();
result[i] = *ptr;
}
}
return result;
}
Использование:
byte[] bb = new byte[] { 0,0,0,1 ,1,0,0,0 };
MyStruct[] structs = GetMyStruct(bb); // i1=1 and i2=16777216