Big&Little Endian 高&低字节序

本文详细解释了Big-endian和Little-endian两种字节序的区别及其在网络编程和多机通讯中的应用。通过具体实例展示了不同字节序下多字节数据的读写方式,帮助读者理解字节序对数据解析的影响。

  由于CPU的两大对立阵营的对抗导致了所谓的字节顺序问题。PowerPC(Moto&IBM) VS X86 = Big Vs. Little,两种不同处理多字节数据的方式在多机通讯和网络编程时会给我们带来意外的“惊喜”。开了书和网上的帖子,其实挺简单,一言以蔽之就是 Big-endian最先读写最高的字节,Little-endian反其道而行,低字节优先。 如下例示:
Big Endian

   低地址                                            高地址
   ----------------------------------------->
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     12     |      34    |     56      |     78    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Little Endian

   低地址                                            高地址
   ----------------------------------------->
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     78     |      56    |     34      |     12    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

举个例子,从内存地址0x0000开始有以下数据
0x0000     0x12
0x0001     0x34
0x0002     0xab
0x0003     0xcd
如果我们去读取一个地址为0x0000的四个字节变量,若字节序为big-endian,则读出
结果为0x1234abcd;若字节序位little-endian,则读出结果为0xcdab3412.
如果我们将0x1234abcd写入到以0x0000开始的内存中,则结果为
                big-endian     little-endian
0x0000     0x12              0xcd

0x0001     0x23              0xab

0x0002     0xab               0x34

0x0003     0xcd               0x12

intel是高字节序

solaris(Sun系统)是高字节序

 

高字节序即高位 (所谓高位指的是2(n-1) ~2(n-8)的值) 存低地址        

低字节序即低位 (所谓低位指的是 27~20的值) 存低地址

 

 

#i nclude <stdio.h>
union
{
int i;
char x[2];
}a;


void main()
{
a.x[0] = 10;
a.x[1] = 1;
printf("%d",a.i);
}
答案:266 (低位低地址,高位高地址,内存占用情况是Ox010A)

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值