Я хочу определить структуру данных, к которой я могу получить байтовый доступ. Другими словами: я хочу передать объект определенной c структуры данных в байтовом выражении.
Цель состоит в том, чтобы иметь высокий уровень доступа (доступ по имени) к данным, а также низкий уровень доступ только по байту.
У меня есть протокол передачи данных, который имеет определенный c формат пакета (заголовок, полезная нагрузка, CR C, ... четные определения битов. В конечном итоге весь пакет выровнен по 32-битному).
В "C" я определяю структуру и обращаюсь к объекту этой структуры побайтно, преобразовывая этот объект в байтовый массив. Т.е.:
/* C-Code */
typedef struct
{
int16_t a;
int8_t b;
/* And a bit-wise definition to make thinks really cool */
int8_t bit_0 : 1;
int8_t bit_1_7 : 7;
/* (Total size is 4 bytes i.e. 32-bit aligned) */
} MY_STRUCT_t;
"my_struct" теперь должно читаться побайтно, например, для передачи его куда-нибудь, где: Невыразительный способ:
/* C-Code */
void main(void)
{
MY_STRUCT_t my_struct;
for(uint32_t i = 0; i < sizeof(my_struct); i++)
{
Transfer_Byte( *((uint8_t *) &my_struct) + i);
}
}
Или, чтобы сделать его более выразительным, я также определю следующий «союз»:
/* C-Code */
typedef union
{
MY_STRUCT_t data;
uint8_t bytes[sizeof(MY_STRUCT_t)];
} MY_STRUCT_u;
и сделаю так:
/* C-Code */
void main(void)
{
MY_STRUCT_u my_struct; // object of the union this time!
for(uint32_t i = 0; i < sizeof(my_struct); i++)
{
Transfer_Byte(my_struct.bytes[i]);
}
}
Вопрос
- Как мне это сделать в C#? Каково ваше предложение? Или вы могли бы дать мне подсказку, как решить эту проблему?
Ура