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]);

            }

声明:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/339023.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

三角形周长最短问题_一道三角形周长最小值问题

昨天早上,在朋友圈里看到有朋友发了一道求三角形周长最小值的问题,扫了一眼,觉得这条题目形容臃肿,颜值不高,估计没啥意思,便未作深究。晚上,又看到有人在朋友圈中发这条题目。同一条题目反复出…

java 性能调优_Java性能调优调查结果(第二部分)

java 性能调优这是系列文章的第二篇,我们将分析2014年10月进行的性能调整调查的结果。如果您尚未阅读第一部分,我们建议从此处开始 。 第二部分将重点监视Java应用程序的性能问题。 特别是,我们尝试回答以下问题: 人们如何发现性…

西门子伺服电机选型手册_记,新入行维修电工大胆拆解伺服电机和编码器的经历...

作为一名底层维修电工,最怕碰到维修外置编码器的伺服电机,我们单位用的是西门子S120的驱动方案,绝大多数使用的都是西门子配套电机,组态简单,也不用我们维修,有问题送到西门子授权维修点维修。只有个别的使…

变频器服务器电路板维修,变频器线路板常见维修方法

(1)驱动电路损坏的原因及检查造成驱动损坏的原因有各种各样的,一般来说出现的问题也无非是U,V,W三相无输出,或者输出不平衡,再或者输出平衡但是在低频的时候抖动,还有启动报警等等。当一台变频器大电容后的…

C语言 | 输出月份的英文

“要成为绝世高手,并非一朝一夕,除非是天生武学奇才,但是这种人…万中无一”——包租婆这道理放在C语言学习上也一并受用。在编程方面有着天赋异禀的人毕竟是少数,我们大多数人想要从C语言小白进阶到高手,需要经历的是…

rac san+oracle_Oracle11g1+RAC+install+for+CentOS5(ASM+to+FC+SAN)_IT168文库

Wp1998gmail.comV2011.3.3.1一.安裝環境1.1網絡示意1.2所需軟件linux.x64_11gR1_clusterware.ziplinux.x64_11gR1_database_1013.ziporacleasmlib-2.0.4-1.el5.x86_64.rpmoracleasm-support-2.1.4-1.el5.x86_64.rpmoracleasm-2.6.18-194.el5-2.0.5-1.el5.x86_64.rpm…

中兴5250交换机配置手册_TSN工业交换机中文说明

全面了解CC-Link协议家族宣布CLPA会员公司赫斯曼推出最新研发支持TSN的工业交换机RSPE35,同时这款TSN交换机与三菱CC-Link IE TSN产品连接配置手册也已发布,并在文中附了下载。文章传送门↓可是,交换机的资料都是日文和英语的,能否…

华为桌面云 服务器可以虚拟多少,【华为桌面云】案例:单服务器环境且只有两块本地SATA盘创建虚拟机非常慢...

【关键词】:单服务器,SATA盘,创建虚拟机慢,创建VM慢【适用版本】:FusionAccess V100R005 /FusionSphere V100R003【问题描述】:某局点工程师反馈,他使用单台RH2288V2服务器搭建测试环境&#xf…

C语言 | 为什么写这三行代码

C语言实现Hello xiaolin#include//头文件 int main()//主函数 程序的入口 { printf("Hello xiaolin!\n");// \n是换行的意思 return 0;}编译运行结果:Hello xiaolin!--------------------------------Process exited after 3.326 seconds with return v…

如何分析堆外内存使用情况_堆上与堆外的内存使用情况

如何分析堆外内存使用情况总览 最近有人问我在Java中使用堆内存的好处和智慧。 面临相同选择的其他人可能会对这些答案感兴趣。 堆外内存没什么特别的。 线程堆栈,应用程序代码,NIO缓冲区都在堆外。 实际上,在C和C 中,您只有非托…

centos 虚拟机glibc升级_分享Centos6.5升级glibc过程

上次看到有同学对Centos系统 glibc升级有点疑问, 不过相对来说glibc升级还是比较简单的, 网上也有很多介绍文章, 这里整理了个安装过程供大家参考下 阅读原文场景需求默认的Centos6.5 glibc版本最高为2.12, 而在进行Nodejs开发时项目所依赖的包往往需要更高版本的glibc库支持, …

windows redis批量删除前缀的key_阿里官方Redis开发规范!

本文主要介绍在使用阿里云Redis的开发规范,从下面几个方面进行说明。键值设计命令使用客户端使用相关工具通过本文的介绍可以减少使用Redis过程带来的问题。一、键值设计1、key名设计可读性和可管理性以业务名(或数据库名)为前缀(防止key冲突),用冒号分隔…

matchers依赖_Hamcrest Matchers的高级创建

matchers依赖介绍 上一次 ,我讨论了Hamcrest Matcher是什么,如何使用以及如何制作。 在本文中,我将解释创建Hamcrest Matchers的更多高级步骤。 首先,我将分享如何使您的匹配器更易于类型安全,然后介绍无状态匹配器的一…

深入浅出讲解C语言#define宏定义应用及使用方法

在C语言中,我们使用#define来定义宏。在C程序编译的预处理阶段,预处理器会把宏定义的符号替换成指定的文本。不带参数的宏关于宏最常见的就是用来定义数值常量的名称,即没有参数的宏定义,采用如下形式:1#define 宏名称…

安卓系统双屏异显_Android 双屏异显实现的三种方式

在各种产品脑洞大开的时代,需求也是日益新异,笔者最近开发了一套双屏异显app。现在做一些总结1.双屏异显第一种实现方式(官方提供的Presentation)Android 提供了一个叫 Presentation 类,来实现第二屏, 继承 Presentation 实现第二…

hazelcast入门教程_Hazelcast入门指南第5部分

hazelcast入门教程这是我撰写的有关Hazelcast的一系列文章的延续。 我强烈建议您阅读其他内容: 第1 部分 , 第2 部分 , 第3 部分和第4部分 。 一气呵成的东西 这篇文章中没有Hazelcast专用代码。 让我重复一遍。 这篇文章中没有Hazelcast专用…

单片机C语言编程:.H文件与.C文件的关系!

一个.C文件对应一个.H文件是一种良好的编程习惯,那么.C和.H文件之间的关系是怎么样的呢?一、.H文件与.C文件的关系:迄今为止,写过的程序都是一些很简单的程序,从来没有想到要自己写.H文件,也不知道.H文件到…

python编程快速上手-----让繁琐工作自动化_Python编程快速上手让繁琐工作自动化--逗号代码和字符图网格...

逗号代码假定有下面这样的列表:spam [apples, bananas, tofu, cats]编写一个函数,它以一个列表值作为参数,返回一个字符串。该字符串包含所有表项,表项之间以逗号和空格分隔,并在最后一个表项之前插入and。例如将前面…

spring依赖注入_Spring的依赖注入陷阱

spring依赖注入Spring框架中有三种注入变量: 基于二传手的注射 基于构造函数的注入 基于现场的注入 这些机制中的每一种都有优点和缺点,并且不仅只有一种正确的方法。 例如现场注入: Autowired private FooBean fooBean;在生产代码中使用…

C语言中的“悬空指针”和“野指针”是什么意思?

提起C语言大部分开发者很自然就会想到指针二字,没错,作为C的核心和灵魂,它的地位咱们就不再赘述了,今天我们想跟大家讲的是指针中的两个特有名词:“悬空指针”和“野指针”。1 悬空指针C语言中的指针可以指向一块内存&…