ip
1struct iphdr 2 { 3#if __BYTE_ORDER == __LITTLE_ENDIAN 4 unsigned int ihl:4; 5 unsigned int version:4; 6#elif __BYTE_ORDER == __BIG_ENDIAN 7 unsigned int version:4; 8 unsigned int ihl:4; 9#else 10# error "Please fix <bits/endian.h>" 11#endif 12```Linux環境 /usr/include/netinet/ip.h より抜粋(IPv4のヘッダ部分の一部) 13 14上のコード(ヘッダ部分)を見ると、ホストがリトルエンディアンかビックエンディアンかによって、 15IHLフィールドとVersionフィールド([IPヘッダのフォーマット](https://tools.ietf.org/html/rfc791#section-3.1))を定義する順序が逆になっています。 16エンディアンはバイトの並び方であり、これらの2つのメンバはビット単位で割り当てられているので、この例においてリトルエンディアンの場合、割り当ての順序を逆にしなくても良いと思ったのですが… 17 18~~エンディアン(バイトオーダ)といえば、メモリに格納されるバイトの順序のことですが、 19どうやら上のIPのヘッダの例を見てみるとその定義はおかしいような気がするのです。 20参考にした文献→[エンディアン - Wikipedia](https://ja.wikipedia.org/wiki/%E3%82%A8%E3%83%B3%E3%83%87%E3%82%A3%E3%82%A2%E3%83%B3)~~ 21 22 23分かる方がいらっしゃいましたらご回答お願いします。
回答2件
あなたの回答
tips
プレビュー