如何判断一台计算机的CPU是大端还是小字端对齐呢?

那么首先得了解何为大端,何为小端,明确一下概念。

所谓大端模式,是指字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中。

小端格式:与大端存储格式相反,在小端存储格式中,低地址中存放的是字数据的低字节,高地址存放的是字数据的高字节。

Big-Endian 和 Little-Endian 字节排序

字节排序                                              含义

Big-Endian    一个Word中的高位的Byte放在内存中这个Word区域的低地址处。 Little-Endian  一个Word中的低位的Byte放在内存中这个Word区域的低地址处。

必须注意的是:表中一个Word的长度是16位,一个Byte的长度是8位。如果一个数超过一个Word的长度,必须先按Word分成若干部分,然后每一部分(即每个Word内部)按Big-Endian或者Little-Endian的不同操作来处理字节。 一个例子: 如果我们将0x1234abcd写入到以0x0000开始的内存中,则结果为                  big-endian      little-endian 0x0000      0x12                0xcd 0x0001      0x34               0xab 0x0002      0xab               0x34 0x0003      0xcd               0x12 除了moto的68K系列和dec的sparc是big endian外,常见的cpu都是little endian。ARM同时支持 big和little,实际应用中通常使用little endian,,Intel系列的CPU就是little endian的。

那么如何使用C语言程序判断CPU是大端还是小端对齐呢?

有几个方法:

方法一:直接使用看变量的内存值,这里需要使用一些调试技巧。

#includevoid main(){short s=0x1234;char * pTest=(char*)&s;printf("%p %0X %0X",&s,pTest[0],pTest[1]);}

以十六进制输出short型变量s在内存中的字节分布。

运行结果为:

0012FF7C

34 12

方法二:使用C中的共用体:

请写一个C函数,若处理器是Big_endian的,则返回false;若是Little_endian的,则返回true。

   bool IsLitte_Endian()

{

union w{

int a;

char b;

}c;

c.a=1;

return (c.b==1);

}

方法三:强制类型转换,和共用体的做法差不多。

bool IsLitte_Endian()

{

int wTest = 0x12345678;

short *pTest=(short*)&wTest;

return !(0x1234 == pTest[0]);

}

声明:

本文于网络整理,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。

C语言程序判断计算机的CPU大小端相关推荐

  1. CPU大小端模式对C语言底层开发的影响

    CPU大小端模式对C语言底层开发的影响 ​ 在嵌入式的c语言底层开发过程中,经常会遇到CPU大小端模式的问题,对底层软件的数据结构构建.数据解析.甚至功能实现上均有一定的影响,我自己在ECU的底层软件 ...

  2. 以下c语言程序片段用于估测cpu的cache参数,阿里巴巴笔试题

    阿里巴巴笔试题 1.平均速度最快的排序算法是______. Shell排序 快速排序 冒泡排序 插入排序 2014-03-29 18:36:02 2.某服务进程的QPS(没秒处理的请求个数)较低,在空 ...

  3. 用c语言程序判断谁是小偷

    用c语言程序判断谁是小偷 题目: 警察局抓了a,b,c,d四名偷窃嫌疑犯,当中只有一个是小偷,审问结果如下: a说:"我不是小偷." b说:"c是小偷." c说 ...

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

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

  5. 计算机二级c语言程序填空,计算机二级c语言程序填空题.pdf

    计算机二级c语言程序填空题 1.程序填空题 在主函数中从键盘输入若干个数放入数组a 中,用0 结束输入但不计入数组. 下列给定程序中,函数fun 的功能是:输出数组元素中小于平均值的元素. 例如,数组 ...

  6. 计算机存储的大小端模式解析

    ---------------------------------------------------------------------------------------------------- ...

  7. 【濡白的C语言】数据的存储(大小端模式,原码反码补码,浮点数的存储,浮点型精度缺失的原因)

    前言 很多学习C语言之后就会对各种类型感到很烦,但是数据的类型具有相当的意义.首先是类型决定了大小,即该数据在内存中开辟的空间大小:同时不同的类型还决定了数据存储的方式,相同的数据,存入整形与浮点型方 ...

  8. 计算机是小端模式,计算机内的大小端模式

    一.什么是大端与小端模式? 大端模式英文叫Big-Edian,小端模式英文叫little-Endian. 简单说: 大端模式:低字节存放在内存的低地址,高字节存放在内存的高地址(跟我们的一般思维相一致 ...

  9. c语言程序判断32位还是64位,c++ 判断是64位还是32位系统的实例

    1.IsWow64Process 确定指定进程是否运行在64位操作系统的32环境(Wow64)下. 语法 BOOL WINAPI IsWow64Process( __in HANDLE hProces ...

最新文章

  1. CentOS Linux解决 Device eth0 does not seem to be present
  2. hdu 4850 字符串构造---欧拉回路构造序列 递归+非递归实现
  3. 一张PDF了解JDK9 GC调优秘籍-附PDF下载
  4. 你也被Spring的这个“线程池”坑过吗?
  5. python与java前景-Java和Python现在都很热门,哪个更有前途?
  6. 苹果用户每天解锁iPhone手机80次
  7. XJOI网上同步训练DAY6 T2
  8. imx6 rtl8821cs wifi驱动调试
  9. 高数笔记(十四):多元复合函数的求导法则,隐函数的偏导数,多元微分在几何上的应用
  10. 音视频同步、网络抖动
  11. Doris ODBC外表使用
  12. 英雄联盟 LPL比赛 直播 视频地址 使用VLC播放
  13. django建立个人网站(5图文识别以及聊天机器人)
  14. codeforcesf382D-厉害的我的哥(德巴赫)
  15. Objective-C基础教程读书笔记(3)
  16. 17个获取设计灵感创意必备网站
  17. c#实现qq音乐爬虫
  18. 写出林俊杰《黑夜问白天》歌词
  19. Cesium-监听地图服务是否加载完成的方法
  20. 读书笔记:不可能的技艺,巅峰人生需要凶猛的起点

热门文章

  1. Web应用程序安全性:战斗自己或寻找理智的边缘
  2. 如何在Java 8中将Lambda表达式转换为方法引用?
  3. Lombok–您绝对应该尝试一下
  4. JavaOne 2016后续活动
  5. java堆 数据结构 堆_Java中的紧凑堆外结构/组合
  6. hibernate关联映射_具有关联映射的Hibernate Composite ID
  7. osgi 模块化_OSGi案例研究:模块化vert.x
  8. openshift_云上的播放框架变得简单:Openshift模块
  9. 使用Swagger轻松记录您的Play Framework REST API
  10. 记录链接:与杜克一起玩