大端(Big Endian)与小端(Little Endian) z

大端小端解析
本文详细解释了大端和小端两种字节序的概念及区别,并通过实例展示了它们在内存中的存储方式。此外,还提供了判断当前系统字节序类型的函数实现,并介绍了网络字节序及其在网络传输中的应用。

大端小端其实就是字节在内存的一种组织方式而已。

大端是低地址里存放高字节,高地址里存放低字节。

小端正好相反,低地址里存放低字节,高字节里存放高字节。

一、举例说明,一个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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值