文档章节

关于endian的故事,big-endian和little-endian

lieefu
 lieefu
发布于 2015/12/27 14:46
字数 1017
阅读 32
收藏 0
在各种计算机体系结构中,对于字节、字等的存储机制有所不同,因而引发了计算机通信领域中一个很重要的问题,即通信双方交流的信息单元(比特、字节、字、双字等等)应该以什么样的顺序进行传送。如果不达成一致的规则,通信双方将无法进行正确的编/译码从而导致通信失败。

目前在各种体系的计算机中,通常采用big-endian和little-endian两种字节存储机制描述在多字节数中各个字节的存储顺序。

据Jargon File记载,endian这个词来源于Jonathan Swift在1726年写的讽刺小说 "Gulliver's Travels"(《格利佛游记》)。该小说在描述Gulliver畅游小人国时碰到了如下的一个场景。在小人国里的小人因为非常小(身高6英寸)所以总是碰到一些意想不到的问题。有一次因为对水煮蛋该从大的一端(Big-End)剥开还是小的一端(Little-End)剥开的争论而引发了一场战争,并形成了两支截然对立的队伍:支持从大的一端剥开的人Swift就称作Big-Endians,而支持从小的一端剥开的人就称作Little-Endians......(后缀ian表明的就是支持某种观点的人)。
1980年,Danny Cohen在其著名的论文"On Holy Wars and a Plea for Peace"中为了平息一场关于在消息中 字节该以什么样的顺序进行传送的争论而引用了该词。该文中,Cohen非常形象贴切地把支持从一个消息序列的最高位开始传送的那伙人叫做Big-Endians,支持从最低位开始传送的相对应地叫做Little-Endians。此后Endian这个词便随着这篇论文而被广为采用。
三、常见的Endian

Big-endian

按照最高位 字节(包含最高位,即MSB,的 字节)至最低位字节(包含最低位,即LSB,的字节)的顺序,存放在连续的地址中。
采用这种机制的处理器有IBM3700系列、PDP-10、Mortolora微处理器系列和绝大多数的RISC处理器。
例如:双 字节数0x1234以big-endian的方式存在起始地址0x00000000中
数据<--地址
| 0x12 |<-- 0x00000000
| 0x34 |<-- 0x00000001

Little-endian

按照最低位 字节(包含LSB的字节)至最高位字节(包含MSB的字节)的顺序,存放在连续的地址中。
采用这种机制的处理器有 PDP-11、VAX、Intel系列微处理器和一些网络通信设备。
例如:双字节数0x1234以 little-endian的方式存在起始地址0x00000000中
数据<--地址
| 0x34 |<-- 0x00000000
| 0x12 |<-- 0x00000001

Middle-endian

除了big-endian和 little-endian之外的 多字节存储顺序就是middle-endian。
比如以4个 字节为例:象以3-4-1-2或者2-1-4-3这样的顺序存储的就是middle-endian。
这种存储顺序偶尔会在一些 小型机体系中的十进制数的压缩格式中出现。

程序开发中的应用

byte[] bytes = { 0, 0, 0, 25 };
// If the system architecture is little-endian (that is, little end first),
// reverse the byte array.
if (BitConverter.IsLittleEndian)
Array.Reverse(bytes);
int i = BitConverter.ToInt32(bytes, 0);
Console.WriteLine("int: {0}", i);
// Output: int: 25
在此示例中,调用 BitConverter 类的 GetBytes(Int32) 方法以将 int 转换为字节数组。

本文转载自:http://dict.youdao.com/search?q=bk%3Aendian&keyfrom=wiki.related&le=eng

共有 人打赏支持
lieefu
粉丝 88
博文 113
码字总数 24597
作品 3
济南
高级程序员
big endian与little endian

很多人都知道big endian和little endian但是很少有人知道它们的实质,因为只要你在网上一google,出来的都是那个经典的典故,不可否认,那个典故很重要,但是那也仅仅是个故事而已,计算机也...

晨曦之光
2012/04/10
117
0
big endian and little endian

一、字节序 来自:http://ayazh.gjjblog.com/archives/1058846/ 谈到字节序的问题,必然牵涉到两大CPU派系。那就是Motorola的PowerPC系列CPU和Intel的x86系列CPU。PowerPC系列采用big endia...

元禛慎独
2016/10/15
2
0
c# 主机和网络字节序的转换 关于网络字节序和主机字节序的转换

通常我们认为网络字节序为标准顺序,封包的时候,将主机字节序转换为网络字节序,拆包的时候要将网络字节序转换为主机字节序。 原以为还要自己写函数,其实网络库已经提供了。 主机到网络:s...

snail-
2016/01/21
55
0
关于java与intel x86 cpu交换数据时涉及big endian和little endian的问题

今天看到关于字节序big endian和little endian的问题。通过搜索,知道了: 1.java使用 big endian格式读取字节,这种字节序又称为网络字节序,也就是网络上传输的数据也是这种格式。 2.x86 ...

hy86
2013/05/16
567
5
大端小端(Big- Endian和Little-Endian)

字节序(Endian),大端(Big-Endian),小端(Little-Endian) 图文并茂 http://www.cppblog.com/tx7do/archive/2009/01/06/71276.html 在各种计算机体系结构中,对于字节、字等的存储机制有...

AlphaJay
2010/06/10
0
3

没有更多内容

加载失败,请刷新页面

加载更多

马太效应

马太效应

yizhichao
2分钟前
0
0
69.for while循环 continue break exit

20.10 for循环 20.11/20.12 while循环 20.13 break跳出循环 20.14 continue结束本次循环 20.15 exit退出整个脚本 扩展 select用法 http://www.apelearn.com/bbs/thread-7950-1-1.html 20.10......

王鑫linux
10分钟前
0
0
完整的软件开发流程是怎样的

在it圈混迹了这么久,做过各种各样的工作。但是我确一直不知道一个软件从无到有到底是怎么开发的。于是就产生了强烈的好奇心:一个软件产品的结果为什么是这样?为什么开发的速度不能再快一点...

TreasureWe
17分钟前
0
0
深度学习与图像处理之:人像背景虚化

简单实现思路: 对图像内容进行分割,提取人像 对图像背景进行模糊化处理 将人像和背景重新合成 在这里,使用DeepLabV3模型对图像内容进行分割并提取人像,实现的代码如下: import numpy a...

IOTService
19分钟前
0
0
20180918上课截图

小丑鱼00
26分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部