C语言程序判断计算机的CPU大小端
如何判断一台计算机的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大小端相关推荐
- CPU大小端模式对C语言底层开发的影响
CPU大小端模式对C语言底层开发的影响 在嵌入式的c语言底层开发过程中,经常会遇到CPU大小端模式的问题,对底层软件的数据结构构建.数据解析.甚至功能实现上均有一定的影响,我自己在ECU的底层软件 ...
- 以下c语言程序片段用于估测cpu的cache参数,阿里巴巴笔试题
阿里巴巴笔试题 1.平均速度最快的排序算法是______. Shell排序 快速排序 冒泡排序 插入排序 2014-03-29 18:36:02 2.某服务进程的QPS(没秒处理的请求个数)较低,在空 ...
- 用c语言程序判断谁是小偷
用c语言程序判断谁是小偷 题目: 警察局抓了a,b,c,d四名偷窃嫌疑犯,当中只有一个是小偷,审问结果如下: a说:"我不是小偷." b说:"c是小偷." c说 ...
- 判断cpu大小端模式(c++代码实现)
首先来了解一下大小端模式. 大端模式:高位对应低地址,低位对应高地址 :换而言之,就是数字的高位存放在内存的低址地,低位存放在内存的高地址 小端模式:高位对应高地址,低位对应低地址 :即数字的高位存放 ...
- 计算机二级c语言程序填空,计算机二级c语言程序填空题.pdf
计算机二级c语言程序填空题 1.程序填空题 在主函数中从键盘输入若干个数放入数组a 中,用0 结束输入但不计入数组. 下列给定程序中,函数fun 的功能是:输出数组元素中小于平均值的元素. 例如,数组 ...
- 计算机存储的大小端模式解析
---------------------------------------------------------------------------------------------------- ...
- 【濡白的C语言】数据的存储(大小端模式,原码反码补码,浮点数的存储,浮点型精度缺失的原因)
前言 很多学习C语言之后就会对各种类型感到很烦,但是数据的类型具有相当的意义.首先是类型决定了大小,即该数据在内存中开辟的空间大小:同时不同的类型还决定了数据存储的方式,相同的数据,存入整形与浮点型方 ...
- 计算机是小端模式,计算机内的大小端模式
一.什么是大端与小端模式? 大端模式英文叫Big-Edian,小端模式英文叫little-Endian. 简单说: 大端模式:低字节存放在内存的低地址,高字节存放在内存的高地址(跟我们的一般思维相一致 ...
- c语言程序判断32位还是64位,c++ 判断是64位还是32位系统的实例
1.IsWow64Process 确定指定进程是否运行在64位操作系统的32环境(Wow64)下. 语法 BOOL WINAPI IsWow64Process( __in HANDLE hProces ...
最新文章
- CentOS Linux解决 Device eth0 does not seem to be present
- hdu 4850 字符串构造---欧拉回路构造序列 递归+非递归实现
- 一张PDF了解JDK9 GC调优秘籍-附PDF下载
- 你也被Spring的这个“线程池”坑过吗?
- python与java前景-Java和Python现在都很热门,哪个更有前途?
- 苹果用户每天解锁iPhone手机80次
- XJOI网上同步训练DAY6 T2
- imx6 rtl8821cs wifi驱动调试
- 高数笔记(十四):多元复合函数的求导法则,隐函数的偏导数,多元微分在几何上的应用
- 音视频同步、网络抖动
- Doris ODBC外表使用
- 英雄联盟 LPL比赛 直播 视频地址 使用VLC播放
- django建立个人网站(5图文识别以及聊天机器人)
- codeforcesf382D-厉害的我的哥(德巴赫)
- Objective-C基础教程读书笔记(3)
- 17个获取设计灵感创意必备网站
- c#实现qq音乐爬虫
- 写出林俊杰《黑夜问白天》歌词
- Cesium-监听地图服务是否加载完成的方法
- 读书笔记:不可能的技艺,巅峰人生需要凶猛的起点
热门文章
- Web应用程序安全性:战斗自己或寻找理智的边缘
- 如何在Java 8中将Lambda表达式转换为方法引用?
- Lombok–您绝对应该尝试一下
- JavaOne 2016后续活动
- java堆 数据结构 堆_Java中的紧凑堆外结构/组合
- hibernate关联映射_具有关联映射的Hibernate Composite ID
- osgi 模块化_OSGi案例研究:模块化vert.x
- openshift_云上的播放框架变得简单:Openshift模块
- 使用Swagger轻松记录您的Play Framework REST API
- 记录链接:与杜克一起玩