为什么80%的码农都做不了架构师?>>>   

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

目前在各种体系的计算机中,通常采用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 转换为字节数组。

转载于:https://my.oschina.net/lieefu/blog/551748

关于endian的故事,big-endian和little-endian相关推荐

  1. 字节序、大端字节序(Big Endian)、小端字节序(Little Endian)总结

    什么是字节序? 字节序,简单来说,指的是 超过一个字节的数据类型在内存中存储的顺序 有几种字节序? 大端字节序(Big Endian) 高位字节数据存放在内存低地址处,低位字节数据存放在内存高地址处. ...

  2. 大端(Bid Endian)、小端(Little Endian)含义

    一. 大小端概念 Big-Endian和Little-Endian的定义如下: Little-Endian 数据的低位字节位存放在内存的低地址端,高位字节存放在内存的高地址端. Big-Endian ...

  3. big endian与little endian

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

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

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

  5. 大端(Big Endian)与小端(Little Endian)详解

    大端(Big Endian)与小端(Little Endian)简介 /// 1. 你从哪里来? 端模式(Endian)的这个词出自JonathanSwift书写的<格列佛游记>.这本书根 ...

  6. Unicode、UTF-8、Big Endian、Little Endian、GBK、UCS-2

    Unicode.UTF-8.Big Endian.Little Endian.GBK.UCS-2 一.Unicode.UCS.GBK 1.开始计算机只在美国用.八位的字节一共可以组合出256(2的8次 ...

  7. 2007-11-22 21:24 大端(Big Endian)与小端(Little Endian)详解

    [大端(Big Endian)与小端(Little Endian)简介] Byte Endian是指字节在内存中的组织,所以也称它为Byte Ordering,或Byte Order. 对于数据中跨越 ...

  8. BIG ENDIAN V.S. LITTER ENDIAN

    大端(Big Endian)与小端(Little Endian)详解 [大端(Big Endian)与小端(Little Endian)简介] Byte Endian是指字节在内存中的组织,所以也称它 ...

  9. 大端和小端存储模式解析

    一.大端模式和小端模式的起源 关于大端小端名词的由来,有一个有趣的故事,来自于Jonathan Swift的<格利佛游记>:Lilliput和Blefuscu这两个强国在过去的36个月中一 ...

最新文章

  1. 趣谈网络协议笔记-二(第七,八,九讲)
  2. 关于js中function(e) e的理解
  3. Magicodes.IE基础教程之导出Pdf
  4. SQL 基础之单行函数(七)
  5. 又是一个github吗? Kubernetes 初创公司 Heptio被VMware 收购
  6. Python使用matplotlib可视化模拟烧烤摊每月营业额柱状图
  7. python网络开发框架_宿迁python网站开发框架收费
  8. (PyTorch0.4.0) TypeError: 'NoneType' object is not iterable
  9. 内存分配-堆-栈-静态区
  10. 软件验收报告文档模版
  11. android选择本地相册或拍照更换软件背景图片
  12. 【OS】单道程序设计VS多道程序设计
  13. 基于raspbian+motion的家庭监控网络
  14. ASA入门实验之NAT
  15. HDU 6143 Killer Names(容斥+组合)
  16. Java SE Development Kit (JDK) 安装
  17. SqlServer数据库应用
  18. getservbyname、getservbyport
  19. swarm容器编排(多机管理容器)
  20. 手把手教你使用TensorFlow训练出自己的模型

热门文章

  1. 存储组和数据库的区别?
  2. mongodb yum 安装
  3. 秋色园QBlog技术原理解析:UrlRewrite之无后缀URL原理(三)
  4. 特殊权限之set uid,set gid,sticky bit以及软链接和硬链接
  5. 微信朋友圈里的十五种类型,笑死了!
  6. 成都Uber优步司机奖励政策(1月20日)
  7. Java 数组的 12 个最佳方法
  8. golang学习笔记————字符串
  9. CSS 负边距自适应布局
  10. Mac OS X安装Git