网站的盈利模式,品牌管理公司网站建设,yu网站建设,西安建筑工程有限公司如何判断一台计算机的CPU是大端还是小字端对齐呢#xff1f;那么首先得了解何为大端#xff0c;何为小端#xff0c;明确一下概念。所谓大端模式#xff0c;是指字数据的高字节存储在低地址中#xff0c;而字数据的低字节则存放在高地址中。小端格式#xff1a;与大端存储… 如何判断一台计算机的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 s0x1234;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 IsLitteEndian() { union w{ int a; char b; }c; c.a1; return (c.b1); }方法三强制类型转换和共用体的做法差不多。 bool IsLitte_Endian() { int wTest 0x12345678; short *pTest(short*)wTest; return !(0x1234 pTest[0]); }声明本文于网络整理版权归原作者所有如来源信息有误或侵犯权益请联系我们删除或授权事宜。