当前位置: 技术问答>linux和unix
请教:单个字节的big-endian与litter-endian
来源: 互联网 发布时间:2016-12-09
本文导语: 我看unix书上在定义IP包的时候,里面有: struct iphdr { #if _BYTE_ORDER=_LITTER_ENDIAN u_int8_t ihl:4; u_int8_t version:4; #elif _BYTE_ORDER=_BIG_ENDIAN u_int8_t version:4; u_int8_t ihl:4; .... }; 我觉得奇怪,因为我觉得一个字符(8位),它不...
我看unix书上在定义IP包的时候,里面有:
struct iphdr {
#if _BYTE_ORDER=_LITTER_ENDIAN
u_int8_t ihl:4;
u_int8_t version:4;
#elif _BYTE_ORDER=_BIG_ENDIAN
u_int8_t version:4;
u_int8_t ihl:4;
....
};
我觉得奇怪,因为我觉得一个字符(8位),它不存在什么big-endian与litter-endian,
它应该顺序都是一样的,这是怎么回事?(比如0x45,应该不管什么情况都是0x45,不会出现0x54)
struct iphdr {
#if _BYTE_ORDER=_LITTER_ENDIAN
u_int8_t ihl:4;
u_int8_t version:4;
#elif _BYTE_ORDER=_BIG_ENDIAN
u_int8_t version:4;
u_int8_t ihl:4;
....
};
我觉得奇怪,因为我觉得一个字符(8位),它不存在什么big-endian与litter-endian,
它应该顺序都是一样的,这是怎么回事?(比如0x45,应该不管什么情况都是0x45,不会出现0x54)
|
0x45如果是逆着不是0x54
单字节说没有字节序可以说是对的,也可以说是错的,
说它对是因为CPU本身每次就至少读一个字节,CPU本身是不关心大小端问题的,它认为这个字节应该是这么理解它就这么告诉你
说它是错的,是因为字节内也一样遵循大小端的,所以在需要把一个字节拆分开的时候就需要知道cpu是以什么形式理解的了
单字节说没有字节序可以说是对的,也可以说是错的,
说它对是因为CPU本身每次就至少读一个字节,CPU本身是不关心大小端问题的,它认为这个字节应该是这么理解它就这么告诉你
说它是错的,是因为字节内也一样遵循大小端的,所以在需要把一个字节拆分开的时候就需要知道cpu是以什么形式理解的了
|