私のUbuntuディストリビューションのip.hファイルには、以下にコピーされた次の構造体iphdrがあります。変数 ihl と version の順序がバイト順によって変わる理由を誰でも説明できますか? 私の理解によると、複数のバイトがある場合は「エンディアン」が重要になりますが、この場合、これらの 2 つ (ihl とバージョン) を組み合わせて 1 バイトを作成します。したがって、リトル エンディアンまたはビッグ エンディアンであっても、バイト内のビットの順序付けには影響しません。
struct iphdr
{
#if __BYTE_ORDER == __LITTLE_ENDIAN
unsigned int ihl:4;
unsigned int version:4;
#elif __BYTE_ORDER == __BIG_ENDIAN
unsigned int version:4;
unsigned int ihl:4;
#else
# error "Please fix <bits/endian.h>"
#endif
u_int8_t tos;
u_int16_t tot_len;
u_int16_t id;
u_int16_t frag_off;
u_int8_t ttl;
u_int8_t protocol;
u_int16_t check;
u_int32_t saddr;
u_int32_t daddr;
/*The options start here. */
};