ContikiOSのCoAP実装を見ています。特にヘッダー解析時に2つの操作を理解する上で問題があります。コードは以下の通りです。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(unsigned char型)は
- バッファを入力され、パケット
- を収容COAP_HEADER_VERSION_MASK値COAP_HEADER_VERSION_POSITION 0xC0の
- ある6
- タイプ値は4との列挙型構造であります値
- COAP_HEADER_TYPE_MASKの値は0x30
- COAP_HEADER_TYPE_POSITIONの値は4 です。
CoAP RFC 7252によれば、バージョンとタイプの両方が2ビットを占めているので、マスク操作と使用された値は私には合理的です。
私の質問は、2つの演算でシフト値が異なるのはなぜですか、それはunsigned charともう1つのenum構造体を使用するものと何か関係がありますか?
OK、私はそれを得ると思います。最初の操作は2ビットしか保持しませんが、シフトによって適切な位置に配置されます。 6値と4は混乱していました。今私はその違いを理解する。 ありがとう! –