Big Endian和Little Endian的区别

Big Endian和Little Endian的区别


1.故事的起源

“endian”这个词出自《格列佛游记》。小人国的内战就源于吃鸡蛋时是究竟从大头(Big-Endian)敲开还是从小头(Little-Endian)敲开,由此曾发生过六次叛乱,其中一个皇帝送了命,另一个丢了王位。

我们一般将endian翻译成“字节序”,将big endian和little endian称作“大尾”和“小尾”。

2.什么是Big Endian和Little Endian?

在设计计算机系统的时候,有两种处理内存中数据的方法。一种叫为little-endian,存放在内存中最低位的数值是来自数据的最右边部分(也就是数据的最低位部分)。比如一个16进制数字0x12345678 在内存存放的方式如下:

           

01111000

01010110

00110100

00010010

地址

100

101

102

103

 

 

            另一种称为big-endian,正好相反,存放在内存中最低位的数值是来自数据的最左边边部分(也就是数据的最高为部分)。比如一个16进制数字0x12345678 在内存存放的方式如下:

00010010

00110100

01010110

01111000

地址

100

101

102

103

比如某些文件需要在不同平台处理,或者通过Socket通信。这方面我们可以借助ntohl(), ntohs(), htonl(), and htons()函数进行格式转换。

3.如何判断系统是Big Endian还是Little Endian?

在/usr/include/中(包括子目录)查找字符串BYTE_ORDER(或_BYTE_ORDER, __BYTE_ORDER),确定其值。这个值一般在endian.h或machine/endian.h文件中可以找到,有时在feature.h中,不同的操作系统可能有所不同。一般来说,Little Endian系统BYTE_ORDER(或_BYTE_ORDER,__BYTE_ORDER)为1234,Big Endian系统为4321。大部分用户的操作系统(如windows, FreeBsd,Linux)是Little Endian的。少部分,如MAC OS ,是Big Endian 的。本质上说,Little Endian还是Big Endian与操作系统和芯片类型都有关系。

个人感想:
其实,从Big Endian和 Little Endian 字面上的意思就可以判断它们的差别:
首先,我们认为两种方式存储方式都是从低地址向高地址,其差别就在于究竟是从数据的最低位(The least Significant bit)还是最高位(The most Significant bit)开始填入。从字面上来理解的话,Little Endian当然是从最低位开始填入,Big Endian也就是从最高位开始填入。
比如: AX=4567H(45是高位,67是低位,高低按权重来判断)那么,
AX 的 Big Endian为:
Bit:                45(先取出高位)        67(取出低位)
Memory Address:     100(先填充低地址)      101(然后往高地址填充)
采用Big Endian方式,从内存中读取的数据和原来的一样,也就是:4567H

AX的Little Endian为:
Bit:                67(先取出低位)        45(取出高位)
Memory Address:     100(先填充低地址)      101(然后往高地址填充)
采用Big Endian方式,从内存中读取的数据和原来的相反,也就是:6745H


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值