Endian 的由来


一、引子
  在各种计算机体系结构中,对于字节、字等的存储机制有所不同,因而引发了
计算机通信领域中一个很重要的问题,即通信双方交流的信息单元(比特、字节、
字、双字等等)应该以什么样的顺序进行传送。如果不达成一致的规则,通信双方
将无法进行正确的编/译码从而导致通信失败。目前在各种体系的计算机中通常采
用的字节存储机制主要有两种:
big-endian和little-endian。本文简要描述这两种存储机制的来历、特点和区别。
  
  为了叙述方便,下面先对本文中将要用到的两个术语做简单的定义。
  1、MSB
  MSB是Most Significant Bit/Byte的首字母缩写,通常译为最重要的位或者最
重要的字节。它通常用来表明在一个bit序列(如一个byte是8个bit组成的一个序
列)或者一个byte序列(如word是两个byte组成的一个序列)中对整个序列取值影
响最大的那个bit/byte。
  2、LSB
  LSB是Least Significant Bit/Byte的首字母缩写,通常译为最不重要的位或
者最不重要的字节。它通常用来表明在一个bit序列(如一个byte是8个bit组成的
一个序列)或者一个byte序列(如word是两个byte组成的一个序列)中对整个序
列取值影响最小的那个bit/byte。

二、endian的由来
  1、Definition
  endian: The ordering of bytes in a multi-byte number.
定义:在计算机系统体系结构中用来描述在多字节数中各个字节的存储顺序。

  2、Etymology
  The term comes from Swift's "Gulliver's Travels" via the famous paper
"On Holy Wars and a Plea for Peace" by Danny Cohen, USC/ISI IEN 137,
1980-04-01.
  The Lilliputians, being very small, had correspondingly small political
problems. The Big-Endian and Little-Endian parties debated over whether
soft-boiled eggs should be opened at the big end or the little end.[From:
Free On-Line Dictionary Of Computing or Jargon File]
  词源:据Jargon File记载,endian这个词来源于Jonathan
Swift在1726年写的讽刺小说 "Gulliver's Travels"(《格利佛游记》)。该小说
在描述Gulliver畅游小人国时碰到了如下的一个场景。在小人国里的小人因为非常
小(身高6英寸)所以总是碰到一些意想不到的问题。有一次因为对水煮蛋该从大的
一端(Big-End)剥开还是小的一端(Little-End)剥开的争论而引发了一场战争,
并形成了两支截然对立的队伍:支持从Big-End剥开的人Swift就称作Big-Endians
而支持从Little-End剥开的人就称作Little-Endians……(后缀ian表明的就是支持
某种观点的人:-)。Endian这个词由此而来。
  
  1980年,Danny Cohen在其著名的论文"On Holy Wars and a Plea for Peace"
中为了平息一场关于在消息中字节该以什么样的顺序进行传送的争论而引用了该词。
该文中,Cohen非常形象贴切地把支持从一个消息序列的MSB开始传送的那伙人叫做
Big-Endians,支持从LSB开始传送的相对应地叫做Little-Endians。此后Endian这
个词便随着这篇论文而被广为采用。

三、各种endian
  1、big-endian
  A computer architecture in which, within a given multi-byte numeric
representation, the most significant byte has the lowest address (the
word is stored "big-end-first").  
Most processors, including the IBM 370 family, the PDP-10, the
Motorola microprocessor families, and most of the various RISC designs
current in mid-1993, are big-endian. [From: Free On-Line Dictionary Of
Computing or Jargon File]
  big-endian:计算机体系结构中一种描述多字节存储顺序的术语,在这种机制
中最重要字节(MSB)存放在最低端的地址上。采用这种机制的处理器有IBM3700系
列、PDP-10、Mortolora微处理器系列和绝大多数的RISC处理器。

+----------+
| 0x34 |<-- 0x00000021
+----------+
| 0x12 |<-- 0x00000020
+----------+
图1:双字节数0x1234以big-endian的方式存在起始地址0x00000020中

  在Big-Endian中,对于bit序列中的序号编排方式如下(以双字节数0x8B8A为
例):
bit 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
+----------------------------------------+
val | 1 0 0 0 1 0 1 1 | 1 0 0 0 1 0 1 0 |
+----------------------------------------+
^ 0x8B 0x8A ^
MSB LSB
图2:Big-Endian的bit序列编码方式

  注1:通常在TCP/IP协议栈所说的网络序(Network Order)就是遵循Big-Endian
规则。在TCP/IP网络通信中,通信双方把消息按照如图2的方式进行编码,然后按
从MSB(Bit0)到LSB的顺序在网络上传送。
  2、little-endian
   A computer architecture in which, within a given
16- or 32-bit word,bytes at lower addresses have lower significance (the
word is stored "little-end-first"). The PDP-11 and VAX families of
computers and Intel microprocessors and a lot of communications and
networking hardware are little-endian.
  The term is sometimes used to describe the ordering of units other
than bytes; most often, bits within a byte. [From: Free On-Line Dictionary
Of Computing or Jargon File]
  little-endian:计算机体系结构中一种描述多字节存储顺序的术语,在这种机
制中最不重要字节(LSB)存放在最低端的地址上。采用这种机制的处理器有PDP-11、
VAX、Intel系列微处理器和一些网络通信设备。该术语除了描述多字节存储顺序外
还常常用来描述一个字节中各个比特的排放次序。

+----------+
| 0x12 |<-- 0x00000021
+----------+
| 0x34 |<-- 0x00000020
+----------+
  图3:双字节数0x1234以little-endian的方式存在起始地址0x00000020中

  在Little-Endian中,对于bit序列中的序号编排和Big-Endian刚好相反,其方
式如下(以双字节数0x8B8A为例):

bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
+-----------------------------------------+
val | 1 0 0 0 1 0 1 1 | 1 0 0 0 1 0 1 0 |
+-----------------------------------------+
^ 0x8B 0x8A ^
MSB LSB
图4:Little-Endian的bit序列编码方式

  注2:通常我们说的主机序(Host Order)就是遵循Little-Endian规则。所以
当两台主机之间要通过TCP/IP协议进行通信的时候就需要调用相应的函数进行主机
序(Little-Endian)和网络序(Big-Endian)的转换。
注3:正因为这两种机制对于同一bit序列的序号编排方式恰恰相反,所以《现
代英汉词典》中对MSB的翻译为“最高有效位”欠妥,故本文定义为“最重要的bit
/byte”。

  3、middle-endian:
   Neither big-endian nor little-endian. Used of
perverse byte orders such as 3-4-1-2 or 2-1-4-3, occasionally found in
the packed decimal formats of some minicomputer manufacturers.[From:
Free On-Line Dictionary Of Computing or Jargon File]
  middle-endian:除了big-endian和little-endian之外的多字节存储顺序就是
middle-endian,比如以4个字节为例:象以3-4-1-2或者2-1-4-3这样的顺序存储的
就是middle-endian。这种存储顺序偶尔会在一些小型机体系中的十进制数的压缩格
式中出现。
四、收尾
  要详细解释这两种编码顺序已经超出本文所涉及的内容,如果你有兴趣的话可
以参考上面提及的Danny Cohen的论文("On Holy Wars and a Plea for Peace"),
该论文详细的描述了这两种编码顺序的历史、所基于的数学理论和各自拥护者争论
的焦点等知识,绝对可以大饱你打破沙锅问到底的内心需要。

五、References & WebLinks
1. Free On-Line Dictionary Of Computing
[http://foldoc.doc.ic.ac.uk/foldoc/index.html]
2. Jargon File [http://info.astrian.net/jargon/]
3. Gulliver's Travels《格利佛游记》
[http://www.jaffebros.com/lee/gulliver/]
4. On Holy Wars and a Plea for Peace
[http://khavrinen.lcs.mit.edu/wollman/ien-137.txt]

Endian 的由来相关推荐

  1. ENDIAN的由来及BIG-EDIAN 和LITTLE-ENDIAN

    一.引子 在各种计算机体系结构中,对于字节.字等的存储机制有所不同,因而引发了 计算机通信领域中一个很重要的问题,即通信双方交流的信息单元(比特.字节. 字.双字等等)应该以什么样的顺序进行传送.如果 ...

  2. 大小端 Big-Endian 与 Little-Endian

    应该说没做底层开发(硬件或驱动)的人很可能不会彻底理解大小端的概念,大小端不是简单的一句"大端在前"还是"小端在前"能够概括的问题.在cpu, 内存, 操作系统 ...

  3. java虚拟机 大小端_每个程序员都应当知道的“大小端”

    概述 机器是分大小端的,这对我们编程有什么影响呢?什么又是大小端呢?也许我们很多时候都不清楚,但仍然可以很好地使用电脑,或者编写代码.但我认为<圣经>里有句话说得很好,"你应该了 ...

  4. 什么是Little Endian和Big Endian?(Endianness:字节序、端序、尾序)

    缅怀先驱:提出字节序概念的以色列裔计算机科学家Danny Cohen1,于2019-08-22病逝,享年81岁2. 目录 名词释义 概念由来 设计原理 应用场景 NBO(Net Bytes Order ...

  5. 三角测量计算三维坐标的代码_浅谈三维扫描仪的由来

    随着人类的发展,每一款新型产品的由来都是工业革命的产物,人们发明的任何一个产品都是要服务于人类并创造出更多的价值:其中三维扫描仪的出现也是为了满足于人类的需要而产生的,在传统的测量中接触式测量是出现最 ...

  6. byte endian(biglittle endian)

    1. 大小端的区别 little endian:把低位字节存放在内存的低位; // big endian:   将低位字节存放在内存的高位; 比如:0x1234,则12 就属于高位字节:34 属于低位 ...

  7. 字符编码简介 ANSI Unicode Unicode big endian UTF-8

    1. ASCII码 我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串.每一个二进制位(bit)有0和 1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte) ...

  8. 2018-3-7 Hadoop简介1(名字的由来,以及基本的结构)

    问题一:什么是云计算? 实际上是提供的一种服务,这个服务的特点是?                  主要是按需分配 云计算_百度百科 https://baike.baidu.com/item/%E4 ...

  9. Selenium 2.0的由来及设计架构(一)

    上一篇文章介绍了Selenium1.0的历史及工作原理, 现在,接着上一次的内容说2.0的由来及设计架构. 就在Selenium1.0处于开发阶段的同时,另一款浏览器自动化框架WebDriver也正在 ...

最新文章

  1. Android之AsyncTask源码解析
  2. 工作分解结构图(Work Breakdown Structure)
  3. 同步异步网络搜集到的比喻
  4. CENTOS 内存释放
  5. 那些女程序员们的故事
  6. DateTime 操作详解
  7. poj 2083 Fractal 纯递归,挺好, 我的版本
  8. 函数参数缺少const导致so无法加载
  9. 记忆测试系统c语言,单词记忆测试器程序设计.doc
  10. 自定义video的controls(播放暂停按钮、进度条、快进快退等)
  11. Php7.5,phpwind7.5灵活的业务支持体系
  12. 家政服务app软件开发
  13. 南京旅行拍照攻略分享
  14. 软件工程毕业设计题目安卓Android移动端推荐
  15. 关于python中matplotib.pyplot中cm的介紹
  16. NVM Node版本管理工具
  17. 力扣:我的日程安排表I
  18. 公众号榜单 | 2020·6月公众号行业排行榜重磅发布
  19. pycharm debug Can‘t process net command: 501 1 0.1 WIN
  20. 双十一大促季,客服资源该如何合理配置

热门文章

  1. docker 打包镜像
  2. 应用软件安全编程代码实现安全
  3. 记录贴/阴阳师core loop
  4. Vivo手机获取文件管理器里的文件路径为空
  5. 十进制换算成二进制、八进制、十六进制
  6. poi读取Excel文档(.xls .xlsx)包含合并单元格
  7. 执行 this.$destroy()后原生DOM事件也无法执行
  8. 关于数据库账号和密码加密问题
  9. 联想小新 Air 13 (Pro) 6,7代笔记本安装Win7系统
  10. 网络安全入门基础须知