本文共 992 字,大约阅读时间需要 3 分钟。
- 什么是Big Endian和Little Endian? 在设计计算机系统的时候,有两种处理内存中数据的方法。一种叫为little-endian,存放在内存中最低位的数值是来自数据的最右边部分(也就是数 据的最低位部分)。
- 如何理解Big Endian和Little Endian 举个例子: int a = 1; a这个数本身的16进制表示是0×00 00 00 01 在内存中怎么存储呢? 如果你的CPU是intel x86架构的(基本上就是通常我们说的奔腾cpu),那么就是0×01 0×00 0×00 0×00 , 这也就是所谓的little-endian, 低字节存放在内存的低位. 如果你的CPU是老式AMD系列的(很老很老的那种,因为最新的AMD系列已经是x86架构了), 它的字节序就是big-endian, 其内存存储就是 0×00 0×00 0×00 0×01在内存中从高字节开始存放。 现在世界上绝大多数的CPU都是little-endian。
- 了解big-endian和little-endian有什么作用? 一个重要的作用就是了解在网络上不同的机器间的数据如何传输。 假设我们在网络上有两台机器A和B, 其中A为little-endian,B为big-endian 机器A要传输上面的整数a给机器B,如何传输呢? 过程是这样的: 机器A先把a在内存中的四个字节0x 01 0×00 0×00 0×00转化为网络字节序0×00 0×00 0×00 0×01,然后一个字节一个字节(从0×00到0×01)喂到网络上去 然后机器B从网络上一个字节一个字节地取出四个字节0×00 0×00 0×00 0×01后又会转化为本地字节序 0×00 0×00 0×00 0×01后放入内存。因而B正确地得到了来自A的数据a 如果数据缺少在网络上的字节序转换的话,情况会怎样呢? 机器A先把a由在内存的四个字节0x 01 0×00 0×00 0×00 一个字节一个字节地喂到网络上,然后机器B从网络上一个字节一个字节地收到0x 01 0×00 0×00 0×00并放入到内存中, B认为他收到了0×01000000, 也就是十进制数1677216,这显然是错误的.
转载于:https://www.cnblogs.com/jacku/articles/3907846.html