Какой тип C следует использовать в этой реализации протокола? - PullRequest
0 голосов
/ 18 марта 2020

Существуют определения протокола связи, которые используют поля для значений, кратных байту, но не используют все пространство в типах 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]?

Я спрашиваю это, пытаясь иметь лучшее время.

Спасибо!

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