Я работаю над кодом в XC8 (C компилятор для 8-битных микроконтроллеров Microchip, вероятно, основанный на g cc).
Я использую много байтовый массив -> что угодно и что угодно -> преобразования байтового массива, подобные этому:
inline int32_t GetInt32(uint8_t b3, uint8_t b2, uint8_t b1, uint8_t b0)
{
int32_t b_31_24 = (((int32_t)b3) << 24);
int32_t b_23_16 = (((int32_t)b2) << 16);
int32_t b_15_08 = (((int32_t)b1) << 8);
int32_t b_07_00 = b0;
return b_31_24 + b_23_16 + b_15_08 + b_07_00;
}
Могу ли я просто использовать объединение, как это?
typedef union {
int32_t int32value;
uint32_t uint32value;
int16_t[2] int16words;
uint16_t[2] uint16words;
int8_t[4] int8bytes;
uint8_t[4] uint8bytes;
} union32_t;
Я хочу уменьшить процессор и / или использование памяти.
Предположим:
- этот код будет использоваться с тем же компилятором
- Я знаю, что такое endiannes есть и не изменится без моего ведома:)
- Я знаю, что у разных компиляторов может быть другое поведение в отношении выравнивания (я тестировал Microchip XC8, XC32, некоторые компиляторы STM).
Почему я спрашиваю об этом?
Я хочу убедиться, что нет проблем с массивами, такими как "неопределенное поведение" при приведении byte array
к int
et c.