端模式(Endian)的这个词出自Jonathan Swift书写的《格列佛游记》。这本书根据将鸡蛋敲开的方法不同将所有的人分为两类,从圆头开始将鸡蛋敲开的人被归为Big Endian,从尖头开始将鸡蛋敲开的人被归为Littile Endian。小人国的内战就源于吃鸡蛋时是究竟从大头(Big-Endian)敲开还是从小头(Little-Endian)敲开。在计算机业Big Endian和Little Endian也几乎引起一场战争。在计算机业界,Endian表示数据在存储器中的存放顺序。下文举例说明在计算机中大小端模式的区别。

如果将一个32位的整数0x12345678存放到一个整型变量(int)中,这个整型变量采用大端或者小端模式在内存中的存储由下表所示。为简单起见,这里使用OP0表示一个32位数据的最高字节MSB(Most Significant Byte),使用OP3表示一个32位数据最低字节LSB(Least Significant Byte)。
 
地址偏移   大端模式    小端模式 
0x00      12(OP0)   78(OP3) 
0x01      34(OP1)   56(OP2) 
0x02      56(OP2)   34(OP1) 
0x03      78(OP3)   12(OP0)

如果将一个16位的整数0x1234存放到一个短整型变量(short)中。这个短整型变量在内存中的存储在大小端模式由下表所示。

地址偏移    大端模式    小端模式 
0x00       12(OP0)   34(OP1) 
0x01       34(OP1)   12(OP0)

由上表所知,采用大小模式对数据进行存放的主要区别在于在存放的字节顺序,大端方式将高位存放在低地址,小端方式将低位存放在低地址。采用大端方式进行数据存放符合人类的正常思维,而采用小端方式进行数据存放利于计算机处理。到目前为止,采用大端或者小端进行数据存放,其孰优孰劣也没有定论。
    有的处理器系统采用了小端方式进行数据存放,如Intel的奔腾。有的处理器系统采用了大端方式进行数据存放,如IBM半导体和Freescale的PowerPC处理器。不仅对于处理器,一些外设的设计中也存在着使用大端或者小端进行数据存放的选择。
    因此在一个处理器系统中,有可能存在大端和小端模式同时存在的现象。这一现象为系统的软硬件设计带来了不小的麻烦,这要求系统设计工程师,必须深入理解大端和小端模式的差别。大端与小端模式的差别体现在一个处理器的寄存器,指令集,系统总线等各个层次中。

判断大端小端

    int i=1;  
    char *p=(char *)&i;  
    if(*p==1)    
           printf("1"); 
    else
           printf("2");

      大小端存储问题,如果小端方式中(i占至少两个字节的长度)则i所分配的内存最小地址那个字节中就存着1,其他字节是0.大端的话则1在i的最高地址字节处存放,char是一个字节,所以强制将char型量p指向i则p指向的一定是i的最低地址,那么就可以判断p中的值是不是1来确定是不是小端。

请写一个C函数,若处理器是Big_endian的,则返回0;若是Little_endian的,则返回1
解答:
int checkCPU( )
{
{
union w
{  
int a;
char b;
} c;
c.a = 1;
return(c.b ==1);
}
}
剖析:
嵌入式系统开发者应该对Little-endian和Big-endian模式非常了解。采用Little-endian模式的CPU对操作数的存放方式是从低字节到高字节,而Big-endian模式对操作数的存放方式是从高字节到低字节。例如,16bit宽的数0x1234在Little-endian模式CPU内存中的存放方式(假设从地址0x4000开始存放)为:
内存地址
0x4000
0x4001
存放内容
0x34
0x12
而在Big-endian模式CPU 内存中的存放方式则为:
内存地址
0x4000
0x4001
存放内容
0x12
0x34
32bit 宽的数 0x12345678 在 Little-endian 模式 CPU 内存中的存放方式(假设从地址 0x4000 开始存放)为:
内存地址
0x4000
0x4001
0x4002
0x4003
存放内容
0x78
0x56
0x34
0x12
而在 Big-endian 模式 CPU 内存中的存放方式则为:
内存地址
0x4000
0x4001
0x4002
0x4003
存放内容
0x12
0x34
0x56
0x78
联合体 union 的存放顺序是所有成员都从低地址开始存放,面试者的解答利用该特性,轻松地获得了 CPU 对内存采用 Little-endian 还是 Big-endian 模式读写。

 原文地址 http://blog.chinaunix.net/u3/94145/showart.php?id=1917685

关于这个问题

另外还有http://bbs3.chinaunix.net/thread-1504263-1-1.html

http://blog.csdn.net/beepbug/archive/2006/06/12/792203.aspx

认识(大端--小端)端模式相关推荐

  1. 大端小端模式判断以及数据转换

    简介 在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为 8bit.但是在C语言中除了8bit的char之外,还有16bit的short型,32bit的long型(要看具体 ...

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

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

  3. 大端小端模式(俗称大尾小尾模式)

    转自百度百科 http://baike.baidu.com/link?url=uKVPtSaiXzEAXJSHfiya1Wj_oITw-t8MpHkJxJvMb0Eu_WXo28czAHLY-FOqj ...

  4. netty 大端小端_深入浅出: 大小端模式

    Writer      :李强强 一.什么是大小端? 大小端在计算机业界,Endian表示数据在存储器中的存放顺序.百度百科如下叙述之: 大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节 ...

  5. java 大端模式_记住!大端小端

    关于大端和小端,自己已经记了很多次了,可每次都忘,今天创新工场笔试,第一道题就是关于大端小端的知识,可惜,自己又忘了,怎么回事,说到底,是自己同时记大端和小端,导致容易混淆,现在只记小端了:小端,是数 ...

  6. 大端小端存储模式详解及判断方法

    文章目录 大小端模式的概念 两种模式出现原因 两种模式的优劣 大小端的应用情景 判断机器的字节序 大小端模式的概念 当我们查看数据在内存中的存储情况时,我们经常会发现一个很奇怪的现象,什么现象呢? i ...

  7. socket 大端 小端 转换 (转)《二》

    http://blog.csdn.net/kukumouse/article/details/2270356 (1)对于位域结构中的变量来说,其长度不能跨越字节,也就是说不能超过8位.当然如果设置空白 ...

  8. C语言中低位存放,C语言 大端小端存储解析以及判断方法

    当我们在C语言中查看数据在内存中的存储时,我们经常会发现一个很奇怪的现象,什么现象呢? 例如下面这段代码 int main() { int i = 1; return 0; } 数据在内存中的存放方式 ...

  9. C语言程序设计 | 大端小端存储解析以及判断方法

    当我们在C语言中查看数据在内存中的存储时,我们经常会发现一个很奇怪的现象,什么现象呢? 例如下面这段代码 int main() {int i = 1;return 0; } 数据在内存中的存放方式似乎 ...

最新文章

  1. oracle异地迁移,数据泵实现Oracle数据迁移到异地库
  2. StackOverflow How to programmatically unplug replug an arbitrary USB device? 如何以编程方式拔出并重新插入任意USB设备
  3. 这样读源码,不牛X也难
  4. 从Java连接到Cassandra
  5. 程序员的快速成长之路
  6. java 多线程工具_多线程测试工具groboutils的使用
  7. MongoDB数据库的删除与重建 - 精简篇
  8. 在 Windows 10 的 Linux 子系统(WSL)中运行 Kali
  9. Cisco路由器 VOIP 配置
  10. c 语言 移位四舍五入,关于C 语言中的四舍五入问题
  11. Zabbix email 配置
  12. html文件form根目录,HTML ,form 和 link 使用根目录 的问题,我已经上图了!
  13. BOOST库介绍(四)——文件系统相关
  14. JAVA面试技巧之项目介绍
  15. JAVA计算机毕业设计劳务外包管理系统(附源码、数据库)
  16. EXCEL抓取SQL查询数据
  17. K8s 集群上运行ca机制
  18. 机器指令程序编写方法
  19. oracle中字段类型为date存储数据精确到时分秒的问题
  20. word文档的数据损坏如何进行修复

热门文章

  1. unlikely和likely的使用
  2. 校园无线网登陆成功,但打开浏览器不能上网怎么办?标签上显示注销页怎么办?
  3. 表的自然连接(数据结构链表链接)
  4. Debian安装谷歌浏览器(Google Chrome)
  5. EXCEL VBA常用语句
  6. 从反反鸡汤谈过犹不及
  7. 网格员计算机考试基础知识,网格员考题_请问下网格员考试的内容题目是什么要复习什么_淘题吧...
  8. Antigen Detector(新冠试剂盒检测)
  9. 使用STM32CubeMX新建小熊派的STM32L431RCT6工程实现LED灯闪烁
  10. java u盘_Java检测Windows的U盘插入详解