我正在查看 ContikiOS 中的 CoAP 实现,特别是在标头解析方面,我在理解两个操作时遇到了一些麻烦。代码如下。
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 和另一个使用 enum 结构有关?