大端小端其实就是字节在内存的一种组织方式而已。
大端是低地址里存放高字节,高地址里存放低字节。
小端正好相反,低地址里存放低字节,高字节里存放高字节。
一、举例说明,一个16进制的数0x 11 22 33,在地址0x3000--0x3002中存放。
(1)按大端(big_endian)方式存放
地址0x3000 中存放11
地址0x3001 中存放22
地址0x3002 中存放33
(2)按小端(little_endian)方式存放
地址0x3000 中存放33
地址0x3001 中存放22
地址0x3002 中存放11
二、用函数判断说明
bool IsBig_Endian()
{
unsigned short test = 0x1122;
if(*( (unsigned char*) &test ) == 0x11)
return TRUE;
else
return FALSE;
}
如果字节序为big-endian,返回true;
反之为 little-endian,返回false
一般Linux系统的字节存放方式都是Little_Endian,但结构体里存放一般是Big_Endian.
在网络字节序中,一般也是按照大端进行排序。
4个字节的32 bit值以下面的次序传输:首先是0~7bit,其次8~15bit,然后16~23bit,最后是24~31bit。这种传输次序称作大端字节序。由于TCP/IP首部中所有的二进制整数在网络中传输时都要求以这种次序,因此它又称作网络字节序。比如,以太网头部中2字节的“以太网帧类型”,表示后面数据的类型。对于ARP请求或应答的以太网帧类型来说,在网络传输时,发送的顺序是0x08,0x06。则存放的方式如下所示:
0x06 低位
0x08 高位
该字段的值为0x0806。按照大端方式存放在内存中。
大端是低地址里存放高字节,高地址里存放低字节。
小端正好相反,低地址里存放低字节,高字节里存放高字节。
一、举例说明,一个16进制的数0x 11 22 33,在地址0x3000--0x3002中存放。
(1)按大端(big_endian)方式存放
地址0x3000 中存放11
地址0x3001 中存放22
地址0x3002 中存放33
(2)按小端(little_endian)方式存放
地址0x3000 中存放33
地址0x3001 中存放22
地址0x3002 中存放11
二、用函数判断说明
bool IsBig_Endian()
{
unsigned short test = 0x1122;
if(*( (unsigned char*) &test ) == 0x11)
return TRUE;
else
return FALSE;
}
如果字节序为big-endian,返回true;
反之为 little-endian,返回false
一般Linux系统的字节存放方式都是Little_Endian,但结构体里存放一般是Big_Endian.
在网络字节序中,一般也是按照大端进行排序。
4个字节的32 bit值以下面的次序传输:首先是0~7bit,其次8~15bit,然后16~23bit,最后是24~31bit。这种传输次序称作大端字节序。由于TCP/IP首部中所有的二进制整数在网络中传输时都要求以这种次序,因此它又称作网络字节序。比如,以太网头部中2字节的“以太网帧类型”,表示后面数据的类型。对于ARP请求或应答的以太网帧类型来说,在网络传输时,发送的顺序是0x08,0x06。则存放的方式如下所示:
0x06 低位
0x08 高位
该字段的值为0x0806。按照大端方式存放在内存中。
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
大端小端解析
本文详细解释了大端和小端两种字节序的概念及区别,并通过实例展示了它们在内存中的存储方式。此外,还提供了判断当前系统字节序类型的函数实现,并介绍了网络字节序及其在网络传输中的应用。
1万+

被折叠的 条评论
为什么被折叠?



