文档章节

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

lieefu
 lieefu
发布于 2015/12/27 14:46
字数 1017
阅读 32
收藏 0
点赞 0
评论 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
粉丝 87
博文 108
码字总数 23811
作品 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
关于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
c# 主机和网络字节序的转换 关于网络字节序和主机字节序的转换

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

snail-
2016/01/21
55
0
nodejs doc 学习

OS 1. os.endianness() Returns the endianness of the CPU. Possible values are "BE" or "LE". Little endian 和Big endian 是CPU 存放数据的两种不同顺序。对于整型、长整型等数据类型,B......

sl_yang
2014/06/19
125
0
字节序之大小端模式

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

SuShine
2016/10/15
4
0
little endian和big endian的概念解释,判定与用途

转贴地址:http://www.chinaunix.net/jh/23/823662.html ####################### //声明: 1 本帖作者是:converse ,至此感谢! 2 红色背景字体为本人添加内容! 3 黄色背景为个人阅读重点...

ll124884135
2012/04/05
0
0
c# 主机和网络字节序的转换 关于网络字节序和主机字节序的转换

最近使用C#进行网络开发,需要处理ISO8583报文,由于其中有些域是数值型的,于是在传输的时候涉及到了字节序的转换。 字节顺序是指占内存多于一个字节类型的数据在内存中的存放顺序,通常有两...

微wx笑
2014/03/10
0
0
字节序和大小端

字节顺序 字节顺序(Endian) 字节序是指多字节数据在计算机内存中存储或者网络传输时各字节的存储顺序。 计算机系统一般采用字节(Byte(8 bit ))作为逻辑寻址单位。当物理单位的长度大于1个字...

子韦一
2013/12/25
366
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

NNS域名系统之域名竞拍

0x00 前言 其实在官方文档中已经对域名竞拍的过程有详细的描述,感兴趣的可以移步http://doc.neons.name/zh_CN/latest/nns_protocol.html#id30 此处查阅。 我这里主要对轻钱包开发中会用到的...

暖冰
今天
0
0
32.filter表案例 nat表应用 (iptables)

10.15 iptables filter表案例 10.16/10.17/10.18 iptables nat表应用 10.15 iptables filter表案例: ~1. 写一个具体的iptables小案例,需求是把80端口、22端口、21 端口放行。但是,22端口我...

王鑫linux
今天
0
0
shell中的函数&shell中的数组&告警系统需求分析

20.16/20.17 shell中的函数 20.18 shell中的数组 20.19 告警系统需求分析

影夜Linux
今天
0
0
Linux网络基础、Linux防火墙

Linux网络基础 ip addr 命令 :查看网口信息 ifconfig命令:查看网口信息,要比ip addr更明了一些 centos 7默认没安装ifconfig命令,可以使用yum install -y net-tools命令来安装。 ifconfig...

李超小牛子
今天
1
0
[机器学习]回归--Decision Tree Regression

CART决策树又称分类回归树,当数据集的因变量为连续性数值时,该树算法就是一个回归树,可以用叶节点观察的均值作为预测值;当数据集的因变量为离散型数值时,该树算法就是一个分类树,可以很...

wangxuwei
昨天
1
0
Redis做分布式无锁CAS的问题

因为Redis本身是单线程的,具备原子性,所以可以用来做分布式无锁的操作,但会有一点小问题。 public interface OrderService { public String getOrderNo();} public class OrderRe...

算法之名
昨天
10
0
143. Reorder List - LeetCode

Question 143. Reorder List Solution 题目大意:给一个链表,将这个列表分成前后两部分,后半部分反转,再将这两分链表的节点交替连接成一个新的链表 思路 :先将链表分成前后两部分,将后部...

yysue
昨天
1
0
数据结构与算法1

第一个代码,描述一个被称为BankAccount的类,该类模拟了银行中的账户操作。程序建立了一个开户金额,显示金额,存款,取款并显示余额。 主要的知识点联系为类的含义,构造函数,公有和私有。...

沉迷于编程的小菜菜
昨天
1
0
从为什么别的队伍总比你的快说起

在机场候检排队的时候,大多数情况下,别的队伍都要比自己所在的队伍快,并常常懊悔当初怎么没去那个队。 其实,最快的队伍只能有一个,而排队之前并不知道那个队快。所以,如果有六个队伍你...

我是菜鸟我骄傲
昨天
1
0
分布式事务常见的解决方案

随着互联网的发展,越来越多的多服务相互之间的调用,这时候就产生了一个问题,在单项目情况下很容易实现的事务控制(通过数据库的acid控制),变得不那么容易。 这时候就产生了多种方案: ...

小海bug
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部