试题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模式对操作数的存放方式是从高字节到低字节。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的存放顺序是所有成员都从低地址开始存放的。
以上是网上的原文。让我们看看在ARM处理器上union是如何存储的呢?
地址A
---------------------------------
|A |A+1 |A+2 |A+3 |int a;
| | | | |
---------------------------------
|A |char b;
| |
---------
如果是小端如何存储c.a的呢?
地址A
------------------------------------
|A |A+1 |A+2 |A+3 | int a;
|0x01 |0x00 |0x00 |0x00 |
-------------------------------------
|A |char b;
| |
---------
如果是大端如何存储c.a的呢?
地址A
------------------------------------------
|A |A+1 |A+2 |A+3 |int a;
|0x00 |0x00 |0x00 |0x01 |
------------------------------------------
|A |char b;
| |
---------
现在知道为什么c.b==0的话是大端,c.b==1的话就是小端了吧。
以下是别人给出的一些传输解决方案:
http://bbs2.chinaunix.net/thread-1385066-1-1.html
另外一段代码:
1 #include <stdio.h>
2
3 int main()
4 {
5 int i = 0x0001;
6 (char)i ? printf("s\n") : printf("b\n");
7 return 0;
8 }
分享到:
相关推荐
运行程序,可判识并输出程序所在平台的存储方式,是大端还是小端。
小端大端透析-附检测代码,帮你理清计算机、单片机的大小端存储,含图片形象解析;附测试代码,方便测试;是计算机专业和电子专业以及广大单片机开发人员必备资料
在各种体系的计算机中通常采用的字节存储机制主要有两种: big-endian和little-endian,即大端模式和小端模式。
本文主要描述大端小端的概念,分类和区别,还讲述了他们的由来,以及各自的优缺点,对初识者具有很大的帮助
大端和小端的区别,数据在内存里面存放的方式,源代码讲解,发上来大家一起学习下!
所谓的小端模式,是指数据的低位保存在内存的低地址中,而数 据的高位保存在内存的高地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低,和我们的逻辑方法一致。
大端机小端机检查器-用于检查PC是大端机还是小端机
大端 小端
描述大端、小端模式,给出了如何判断CPU是哪种模式的代码!
利用联合的方法,判断X86平台是小端序存储还是大端序存储
西门子PLC接口,大端和小-Endian的存储格式pdf,西门子PLC接口,大端和小-Endian的存储格式:本文介绍了SINUMERIK:PLC接口,和Little-Endian的Big-Endian的存储格式
本资源代码是自己编写解决获取的数据是大端格式转化为小端格式,并在PC机查看*.jpg文件,希望对大家有用。
iOS 大端格式和小段格式 文档
关于大端小端名词的由来,有一个有趣的故事,来自于Jonathan Swift的《格利佛游记》:Lilliput和Blefuscu这两个强国在过去的36个月中一直在苦战。
前些时候面试的时候的考题,现场没有写好,回来仔细想了想写出来的。聊表慰藉吧。
自己根据spy3中的大端与小端的使用,总结出大小端的理解与区别,及intel与motorola
字节序转换辅助类,short大小端转换,ushort大小端转换,int大小端转换,uint大小...short类型 小端转大端,short类型 大端转小端,int类型 小端转大端,int类型 大端转小端,long类型 小端转大端,long类型 大端转小端
提供一个大小端转换的类,可以转换short int float double类型,提供一个大小端转换的类,可以转换short int float double类型,提供一个大小端转换的类,可以转换short int float double类型
在各种体系的计算机中通常采用的字节存储机制主要有两种: big-endian和little-endian,即大端模式和小端模式。 先回顾两个关键词,MSB和LSB: MSB:Most Significant Bit ------- 最高有效位 LSB:Least ...
判断主机到底是大端还是小端的c程序!利用位置判断