全国咨询/投诉热线:400-618-4000

c/c++培训教你快速理解大端和小端(一)

更新时间:2016年10月21日15时56分 来源:传智播客C++培训学院 浏览次数:


 学习底层编程或逆向的童鞋,肯定对这两个名词并不陌生吧?!今天就给大家介绍一下这两个概念.
 
科普: 
大端和小端,老外叫 Big-Endian 和 Little-Endian,其实指的都是同一个东东!在计算机界, 表示数据在存储器中的存放顺序. 不同的 CPU、操作系统对待数据的存储方式各有不同,但一般常见的操作系统都是小端,而通讯协议则是大端。
但并不是说系统是小端形式存储,文件就一定要采用小端的形式,不同的应用程序对于自身数据的存储方式也各有千秋(自家数据爱咋放咋放,有些还打乱了加密呢),比如:
* Adobe PS -- 大端
* BMP -- 小端
* GIF -- 小端
* JPEG -- 大端
* MacPaint -- 大端
* RTF -- 小端
那么小端和大端有什么区别呢?举个栗子大家就明了了:
比如 0x12345678 这个数:
* 大端法在内存中按字节依次存放为:12 34 56 78
* 小端法在内存中按字节依次存放为:78 56 34 12

解释:
大端:较高的有效字节存放在较低的存储器地址,较低的有效字节存放在较高的存储器地址。
比如整型变量 0x12345678 占 4 个字节,那么根据内存地址从小到大它们的存放方式如下:
数据 0x12 0x34 0x56 0x78
地址 0x10000000 0x10000001 0x10000002 0x10000003
小端:较高的有效字节存放在较高的的存储器地址,较低的有效字节存放在较低的存储器地址。所以整型变量 0x12345678 根据内存地址从小到大它们的存放方式如下:
数据 0x78 0x56 0x34 0x12
地址 0x10000000 0x10000001 0x10000002 0x10000003

本文版权归传智播客C++培训学院所有,欢迎转载,转载请注明作者出处。谢谢!
作者:传智播客C/C++培训学院
首发:http://www.itcast.cn/c/