Существуют определения протокола связи, которые используют поля для значений, кратных байту, но не используют все пространство в типах C, таких как uint8_t, uint16_t, uint32_t и uint64_t.
Например, возьмите этот поддельный протокол (каждая строка является байтом):
* | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
*
* 1 | TYPE | spare |
* 2 | Packet Number |
* 3 | Packet Number |
* 4 | Number Of Packets |
* 5 | Number Of Packets |
* 6 | Number Of Packets |
* 7 | Number Of Octet |
* 8 | Number Of Octet |
* 9 | Number Of Octet |
* 10 | Number Of Octet |
* 11 | Number Of Octet |
Существуют поля, которые можно легко вписать в типы C, такие как TYPE и запасные поля, используя uint8_t и битовые операции или номер пакета в uint16_t. Но как насчет полей Количество пакетов и Количество октетов?
Вопросы:
Следует использовать uint32_t для количества пакетов и uint64_t для количества октетов, хотя они используют только 24 и 40 бит соответственно?
Должен ли быть создан новый тип с использованием битового поля для 24 бит и 40 бит? см.
Или для хранения этих значений должны использоваться массивы uint8_t [3] и uint8_t [5]?
Я спрашиваю это, пытаясь иметь лучшее время.
Спасибо!