Как я могу определить тип, равный 16 байт - PullRequest
0 голосов
/ 22 мая 2018

Я хочу определить тип, равный массиву из 16 байтов.Что-то вроде этого:

typedef uint8_t[16] mynewType;

но я получаю ошибку.Как я могу определить такой тип?

Я получаю несколько ошибок в этой строке, таких как:

missing ';' before '['  
empty attribute block is not allowed    
missing ']' before 'constant'
'constant'  

Ответы [ 5 ]

0 голосов
/ 22 мая 2018

Вы можете использовать структуру с полем массива такого размера.Но вам все равно нужно будет установить значения отдельных байтов.Вы также можете использовать объединение, если хотите получить доступ к разным блокам памяти по-разному.

// simple data structure of 16 bytes
struct pack_16 {
    uint8_t data[16];
}
// sizeof(pack_16) == 16

// multi type access of 16 bytes
union multi_pack_16 {
    uint8_t  uint_8[16];
    uint16_t uint_16[8];
    uint32_t uint_32[4];
    uint64_t uint_64[2];
}
// sizeof(multi_pack_16) == 16

Также, в зависимости от вашего компилятора, может быть определен тип данных uint128_t размером 16 байт..

0 голосов
/ 22 мая 2018
typedef unsigned char mynewType [16];

- это переносимый способ выделения 16 байтов на любой платформе;CHAR_BIT не обязательно обязательно должно быть 8.

0 голосов
/ 22 мая 2018

Как переменная массива:

typedef uint8_t mynewType[16];
0 голосов
/ 22 мая 2018

Typedef похож на объявление, но с дополнительным typedef впереди.

Так что если

uint8_t my_array[16]; 

объявляет новый массив.

typedef uint8_t my_array[16]; 

делает my_array типом такого массива.

0 голосов
/ 22 мая 2018

Просто

typedef uint8_t mynewType [16];
...