Я ищу самый простой способ преобразования байта [] в структуру.Мои тесты показывают, что это работает:
[StructLayout(LayoutKind.Explicit, Size = OrderStruct.SIZE)]
public unsafe struct OrderStruct
{
public const int SIZE = 16;
[FieldOffset(0)]
private fixed byte _data[OrderStruct.SIZE];
[FieldOffset(0), MarshalAs(UnmanagedType.I4)]
public int AssetId;
[FieldOffset(4), MarshalAs(UnmanagedType.I4)]
public int OrderQty;
[FieldOffset(8), MarshalAs(UnmanagedType.R8)]
public double Price;
public static OrderStruct FromBytes(ref byte[] data)
{
if (data.Length < SIZE)
throw new ArgumentException("Size is incorrect");
OrderStruct t = default(OrderStruct);
fixed (byte* src = data)
{
Buffer.MemoryCopy(src, t._data, SIZE, SIZE);
}
return t;
}
public byte[] ToBytes()
{
var result = new byte[SIZE];
fixed (byte* dst = result)
fixed (byte* src = this._data)
{
Buffer.MemoryCopy(src, dst, result.Length, SIZE);
}
return result;
}
}
Я пропустил крайний случай или это хороший способ решить эту проблему?
Дополнительная информация:
- Производительность важна, иначе я бы просто конвертировал каждый элемент отдельно с помощью BitConverter, и это решение заметно быстрее.
- Мне действительно не нужно универсальное решение, так как я собираюсь делать это только для 1 или 2элементы в моей кодовой базе.
- В моем случае мне не нужно беспокоиться о порядке байтов, поскольку это уже обрабатывается в других местах.