Я смотрю реализацию CoAP в ContikiOS, особенно при разборе заголовков, и у меня есть некоторые проблемы с пониманием двух операций. Код ниже.Анализ буфера в C
coap_pkt->version = (COAP_HEADER_VERSION_MASK & coap_pkt->buffer[0]) >> COAP_HEADER_VERSION_POSITION;
coap_pkt->type = (COAP_HEADER_TYPE_MASK & coap_pkt->buffer[0]) >> COAP_HEADER_TYPE_POSITION;
Coap_pkt структура, в которой хранится пакет и проанализированные значения.
- версия представляет собой uint8_t (символ без знака) типа
- Буфера дома пачки
- Значения COAP_HEADER_VERSION_MASK является 0xC0
- COAP_HEADER_VERSION_POSITION 6
- значение типа представляет собой перечисление структуру с 4 значения
- значение COAP_HEADER_TYPE_MASK является 0x30
- значение COAP_HEADER_TYPE_POSITION составляет 4
Теперь, согласно CoAP RFC 7252, оба варианта и тип занимают два бита, и поэтому операции маски и используемые значения имеют смысл для меня.
Мой вопрос в том, почему переменные значения различаются в двух операциях?, Имеет ли он какое-то отношение к одному, используя unsigned char, а другую - структуру перечислений?
ОК, я думаю, я понял, хотя первая операция состояла только из двух бит, а затем сдвиг помещал их в соответствующее положение, поэтому разница между 6 и 4 были запутанными. теперь я понимаю разницу. Спасибо! –