int checkCPUendian()//返回1,为小端;反之,为大端;
{  union{  unsigned int  a;  unsigned char b;  }c;  c.a = 1;  return 1 == c.b;
}

大端模式(Big-endian),是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;

小端模式(Little-endian),是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低,和我们的逻辑方法一致。

为什么会有大小端模式之分呢?

这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为 8bit。但是在C语言中除了8bit的char之外,还有16bit的short型,32bit的long型(要看具体的编译器),另外,对于位数大于 8位的处理器,例如16位或者32位的处理器,由于寄存器宽度大于一个字节,那么必然存在着一个如何将多个字节安排的问题。因此就导致了大端存储模式和小端存储模式。例如一个16bit的short型x,在内存中的地址为0x0010,x的值为0x1122,那么0x11为高字节,0x22为低字节。对于 大端模式,就将0x11放在低地址中,即0x0010中,0x22放在高地址中,即0x0011中。小端模式,刚好相反。我们常用的X86结构是小端模式,而KEIL C51则为大端模式。很多的ARM,DSP都为小端模式。有些ARM处理器还可以由硬件来选择是大端模式还是小端模式。

嵌入式系统开发者应该对Little-endian和Big-endian模式非常了解。例如,16bit宽的数0x1234在Little-endian模式CPU内存中的存放方式(假设从地址0x4000开始存放)为:

内存地址

0x4000

0x4001

存放内容

0x34

0x12

而在Big-endian模式CPU内存中的存放方式则为:

内存地址

0x4000

0x4001

存放内容

0x12

0x34

参考:http://blog.sina.com.cn/s/blog_8a9ed2d701018z8z.html

转载于:https://www.cnblogs.com/alan666/p/8312046.html

利用union判断系统的大小端相关推荐

  1. C语言 Union的用法 和 大小端的判断

    摘自:点击打开链接 Union(联合体)的定义: union 维护足够的空间来置放多个数据成员中的"一种",而不是为每一个数据成员配置空间,在union 中所有的数据成员共用一个空 ...

  2. Linux系统的大小端模式

    大端模式 所谓的大端模式,是指数据的低位(就是权值较小的后面那几位)保存在内存的高地址中,而数据的高位,保存在内存的低地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数 ...

  3. iOS 利用宏判断系统版本

    一般判断系统版本都时候,都会这么写 #define SysVersion [[UIDevice currentDevice] systemVersion].floatValue 复制代码 其实系统已经 ...

  4. php取当前是pc还是手机号,利用PHP判断是手机移动端还是PC端访问的函数示例

    前言 最近在开发项目的时候,分别开发了PC端和手机端,需要实现,用手机访问PC端WWW域名的时候,自动判断跳转到移动端,用电脑访问M域名手机网站的时候,自动跳转到PC端网站,于是有了下面这个判断函数: ...

  5. 判断cpu大小端模式(c++代码实现)

    首先来了解一下大小端模式. 大端模式:高位对应低地址,低位对应高地址 :换而言之,就是数字的高位存放在内存的低址地,低位存放在内存的高地址 小端模式:高位对应高地址,低位对应低地址 :即数字的高位存放 ...

  6. 大小端(网络字节序)等概念

    1.大小端定义 大端存储模式:是指数据的低位字节序保存在内存的高地址中,而数据的高位字节序保存在内存的低地址中 小端存储模式:是指数据的低位字节序保存在内存的低地址中,而数据的高位字节序保存在内存的高 ...

  7. 什么是大小端?如何确定大小端?

    一.什么是大小端? 对于一个由2个字节组成的16位整数,在内存中存储这两个字节有两种方法:一种是将低序字节存储在起始地址,这称为小端(little-endian)字节序:另一种方法是将高序字节存储在起 ...

  8. 通信大小端字节序相关问题总结

    [备注:本文主要是将最新box项目中,遇到的问题做以总结梳理,便于加深印象和后续查阅.本文相关资料主要来源于网络,包括转载的一些资料] 遇到问题: 1.何为大.小端存储. 2.若协议中提及" ...

  9. 大小端 Big-Endian 与 Little-Endian

    应该说没做底层开发(硬件或驱动)的人很可能不会彻底理解大小端的概念,大小端不是简单的一句"大端在前"还是"小端在前"能够概括的问题.在cpu, 内存, 操作系统 ...

最新文章

  1. Parcelable与Serializable的比较
  2. php文件之间相互引用路径问题的一般处理方法
  3. SSE2实现HAAR小波变换(dwt2与idwt2)
  4. LeetCode 354. 俄罗斯套娃信封问题(最长上升子序 DP/二分查找)
  5. 为什么降雨还不凉快? —— 湿度
  6. CCF2014123集合竞价(C语言版)
  7. PostgreSQL 之 分区表
  8. java CopyOnWriteArrayList的使用
  9. There is no more space for virtual disk. db_ sqlserver , vmdk.You might be able to continue this ses
  10. 深入浅出 Kubernetes 架构
  11. Delphi6.0的那些
  12. elasticsearch对analyzed字段无法使用term方法的解决办法
  13. 肖特基二极管工作原理
  14. 链路追踪Logback-ERROR日志邮件发送
  15. UICollectioView的组头和组尾的高度不同设置
  16. 解决 ORA-00913: too many values
  17. [解读] GTN: Generative Teaching Networks
  18. 2.AZ900资源汇总
  19. 如何用代码设置滚动条的位置?
  20. MVC依赖注入Unity应用学习

热门文章

  1. 无监督学习 k-means_无监督学习-第1部分
  2. 变异函数 python_使用Python进行变异测试
  3. 古代的房价跟现在比怎么样?50万能在唐朝买个茅厕吗?
  4. 《魔鸟》:上帝可以宽恕,魔鬼却一个都不放过
  5. 分块内存映射处理大文件-例子
  6. android java 退出程序_android开发两种退出程序方式(killProcess,System.exit)
  7. 如何区分网线是几类的_小移课堂 | 网线这样选,网速才能嗖嗖的!
  8. mysql 数据库还原 不齐_请教mysql数据库还原问题。
  9. 扑克牌图片一张一张_培养孩子的数学力,不妨试试这五个扑克牌游戏
  10. Unity AssetBundle内存管理相关问题