博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Big Endian与Little Endian区别
阅读量:5150 次
发布时间:2019-06-13

本文共 1801 字,大约阅读时间需要 6 分钟。

author:skate

time :2010/03/05


 

 

1. 什么是Big Endian和Little Endian?

 

在设计计算机系统的时候,有两种处理内存中数据的方法。一种叫为little-endian,存放在内存中最低位的数值是来自数据的

最右边部分(也就是数据的最低位部分)。比如一个16进制数字0x12345678,在内存存放的方式如下:

 

       低地址 ------------------> 高地址

       #################################################### 
值    #0111,1000 #0101,0110 # 0011,0100  #  0001,0010  #
       ####################################################
地址 #      100        #     101        #          102       #      103          # 
       ####################################################

 另一种称为big-endian,正好相反,存放在内存中最低位的数值是来自数据的最左边边部分(也就是数据的最高为部分)。

 比如一个16进制数字0x12345678,在内存存放的方式如下:

       低地址 ------------------> 高地址
       #################################################### 
 值   # 0001,0010  #0011,0100 # 0101,0110  #  0111,1000  #
       ####################################################
地址 #       100         #     101         #        102        #        103         # 
       ####################################################

从上面的例子可以看到,采用big endian方式存储数据是符合我们人类的思维习惯的

big endian:是指低地址存放最高有效字节(MSB:Most Significant Byte, 最高有效字节),
little endian:则是低地址存放最低有效字节(LSB:Least Significant Byte, 最低有效字节)

谈到字节序的问题,必然牵涉到两大CPU派系。那就是Motorola的PowerPC系列CPU和Intel的x86系列CPU。
IBM, Motorola(Power PC), Sun的机器一般采用大端(big endian)方式存储数据。而x86系列则采用
little endian方式存储数据

 

是Little Endian还是Big Endian与操作系统和芯片类型都有关系。 具体情形参考处理器手册。

 

2. 如何判断系统是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

3. 为什么要注意字节序的问题?

 

在单机环境里的程序不用考虑字节序(endian)的问题,因为字节序的不同是在不同单机环境里的,如果你要在不同单机

之间传递数据,就要考虑字节序的问题,因为数据是按地址存取的,如果你是不同的字节序单机通信,就会导致传输数据
”变异“,例如,把little endian环境的数据0x12345678的指针传递给big endian环境,数据就“变异”为0x78563412

 

所有网络协议也都是采用big endian的方式来传输数据的。所以有时我们也会把big endian方式称之为网络字节序。当两台采

用不同字节序的主机通信时,在发送数据之前都必须经过字节序的转换成为网络字节序后再进行传输。

 

转载于:https://www.cnblogs.com/shenlanzifa/p/5288798.html

你可能感兴趣的文章
实验四2
查看>>
多路复用
查看>>
Python数据可视化之Pygal(雷达图)
查看>>
Java学习笔记--字符串和文件IO
查看>>
转 Silverlight开发历程—(画刷与着色之线性渐变画刷)
查看>>
SQL语法(3)
查看>>
在js在添版本号
查看>>
sublime3
查看>>
Exception Type: IntegrityError 数据完整性错误
查看>>
Nuget:Newtonsoft.Json
查看>>
Hdu - 1002 - A + B Problem II
查看>>
Android设置Gmail邮箱
查看>>
js编写时间选择框
查看>>
JIRA
查看>>
小技巧——直接在目录中输入cmd然后就打开cmd命令窗口
查看>>
深浅拷贝(十四)
查看>>
HDU 6370(并查集)
查看>>
BZOJ 1207(dp)
查看>>
PE知识复习之PE的导入表
查看>>
HDU 2076 夹角有多大(题目已修改,注意读题)
查看>>