Самый простой и простой способ - использовать union
#define array_size_int32 11
#define array_size_int8 44
typedef union{
int32_t const_data[array_size_int32];
int8_t buffer[array_size_int8];
}my_union_t;
Пример использования:
/* initialize union members */
my_union_t my_union = {
.const_data = {
0x12345678,
0x12345678,
0x12345678,
0x12345678,
0x12345678,
0x12345678,
0x12345678,
0x12345678,
0x12345678,
0x12345678,
0x12345678,
},
};
Пример способа печати:
uint8_t i;
for(i = 0; i < array_size_int8; i++){
/* mask off sign extension bits */
printf("my_union.buffer[%d] = %x\n", i, my_union.buffer[i] & 0xff);
}
Вы можете попробовать код здесь
EDIT:
Я должен добавить, что это работает, потому что объем памяти, необходимый для выделения любого массива, одинаков, и вы столкнетесь с проблемами, если вы измените #define
без учета этого.
Например,
#define array_size_int32 10 //40 bytes
#define array_size_int8 45 //45 bytes