您的位置:首页 > 其它

详解大端模式和小端模式

2017-06-30 00:21 639 查看
一、大端模式和小端模式的起源
       关于大端小端名词的由来,有一个有趣的故事,来自于JonathanSwift的《格利佛游记》:Lilliput和Blefuscu这两个强国在过去的36个月中一直在苦战。战争的原因:大家都知道,吃鸡蛋的时候,原始的方法是打破鸡蛋较大的一端,可以那时的皇帝的祖父由于小时侯吃鸡蛋,按这种方法把手指弄破了,因此他的父亲,就下令,命令所有的子民吃鸡蛋的时候,必须先打破鸡蛋较小的一端,违令者重罚。然后老百姓对此法令极为反感,期间发生了多次叛乱,其中一个皇帝因此送命,另一个丢了王位,产生叛乱的原因就是另一个国家Blefuscu的国王大臣煽动起来的,叛乱平息后,就逃到这个帝国避难。据估计,先后几次有11000余人情愿死也不肯去打破鸡蛋较小的端吃鸡蛋。这个其实讽刺当时英国和法国之间持续的冲突。DannyCohen一位网络协议的开创者,第一次使用这两个术语指代字节顺序,后来就被大家广泛接受。
 
二、什么是大端和小端
       Big-Endian和Little-Endian的定义如下:
1)Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。
2)Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。
举一个例子,比如数字0x12 34 56 78在内存中的表示形式为:
1)大端模式:
低地址 -----------------> 高地址
0x12  |  0x34  |  0x56  | 0x78
2)小端模式:
低地址 ------------------> 高地址
0x78  |  0x56  |  0x34  | 0x12
可见,大端模式和字符串的存储模式类似。
3)下面是两个具体例子:
16bit宽的数0x1234在Little-endian模式(以及Big-endian模式)CPU内存中的存放方式(假设从地址0x4000开始存放)为:
 

内存地址
小端模式存放内容
大端模式存放内容
0x4000
0x34
0x12
0x4001
0x12
0x34
32bit宽的数0x12345678在Little-endian模式以及Big-endian模式)CPU内存中的存放方式(假设从地址0x4000开始存放)为:

内存地址
小端模式存放内容
大端模式存放内容
0x4000
0x78
0x12
0x4001
0x56
0x34
0x4002
0x34
0x56
0x4003
0x12
0x78
 

 4)大端小端没有谁优谁劣,各自优势便是对方劣势:
小端模式 :强制转换数据不需要调整字节内容,1、2、4字节的存储方式一样。
大端模式 :符号位的判定固定为第一个字节,容易判断正负。
 

来自 <http://blog.csdn.net/ce123_zhouwei/article/details/6971544
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  大小端