Я не уверен точно, что вы спрашиваете. Вы пытаетесь получить эквивалентное определение структуры в C # для простого старого использования C # или для взаимодействия (PInvoke)? Если это для PInvoke, следующая структура будет работать
[System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)]
public struct tPacket {
/// WORD->unsigned short
public ushort word1;
/// WORD->unsigned short
public ushort word2;
/// BYTE->unsigned char
public byte byte1;
/// BYTE->unsigned char
public byte byte2;
/// BYTE[8]
[System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.ByValArray, SizeConst=8, ArraySubType=System.Runtime.InteropServices.UnmanagedType.I1)]
public byte[] array123;
}
Если вы ищете простую старую структуру C # с такими же характеристиками, к сожалению, это невозможно сделать со структурой. Вы не можете определить встроенный массив размера contstant в структуре C #, а также не можете заставить массив иметь определенный размер через инициализатор.
В управляемом мире есть два альтернативных варианта.
Используйте структуру, которая имеет метод create, заполняющий массив
[System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)]
public struct tPacket {
public ushort word1;
public ushort word2;
public byte byte1;
public byte byte2;
public byte[] array123;
public static tPacket Create() {
return new tPacket() { array123 = new byte[8] };
}
}
Или, в качестве альтернативы, используйте класс, в котором вы можете напрямую инициализировать переменную-член array123.
РЕДАКТИРОВАТЬ OP хочет знать, как преобразовать байт [] в значение tPacket
К сожалению, нет отличного способа сделать это в C #. C ++ был великолепен для такого рода задач, потому что имеет очень слабую систему типов, в которой вы можете выбрать просмотр потока байтов в качестве определенной структуры (приведение к дурному указателю).
Это может быть возможно в небезопасном коде C #, но я не верю, что это так.
По сути, вам нужно вручную разобрать байты и присвоить их различным значениям в структуре. Или напишите собственный метод, который выполняет приведение стиля C и PInvoke в эту функцию.