Скопируйте значение из структуры с разными типами в 1-байтовый массив значений - PullRequest
0 голосов
/ 29 октября 2019

допустим, у меня есть структура:

typedef struct 
{
   uint8 value_A
   uint32 value_B
   uint32 value_C
   uint8 value_D
   3ByteType value_E
} myStructure_t 
/*Struct has 13 bytes*/

myStructure_t myStruct;

Структура заполнена значениями в определенной точке ....

Я хочу иметь массив с 13 байтами - Значениякоторый представляет значения из структуры

uint8 array_8ByteElements[13] = {0};

   for (uint8 idx = 0; idx <= 12; idx++)
   {
      array_8ByteElements[idx] = ??
   }

где array_8ByteElements [0] = myStruct.value_A

Какой самый быстрый способ достичь этого?

1 Ответ

0 голосов
/ 29 октября 2019

Вы можете использовать объединение:

#pragma pack(push,1)

typedef struct 
{
   uint8 value_A;
   uint32 value_B;
   uint32 value_C;
   uint8 value_D;
   b3ByteType value_E;
} myStructure_t;

typedef union {
    myStructure_t T;
    unsigned char B[sizeof(myStructure_t)];
} myUnion_t;

#pragma pack(pop)

Из-за выравнивания прагмы pack устанавливают выравнивание на 1 байт и после определения возвращают его к выравниванию по умолчанию.

Я не совсем уверен, что это сработает. См. Также ссылку для некоторых программистов Dude на Почему sizeof для структуры не равен сумме sizeof каждого члена?

Может потребоваться переопределить порядок элементов данных вструктура, поэтому он придерживается требований выравнивания. Это может потребовать от вас явной вставки байтов заполнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...