查看CPU的大小端模式
来源:互联网 发布:酒店智能门锁 网络 编辑:程序博客网 时间:2024/06/07 07:27
大小端:CPU对内存单元数据的排列顺序的方式.
采用小端(Little-endian)模式的CPU对操作数的存放方式是从低字节到高字节(从右到左即从低到高);这是X86平台采用的模式;
采用大端(Big-endian)模式对操作数的存放方式是从高字节到低字节;在网络上传送的数据采用的方式;
例如:
16bits宽的数:0x1234在Little-endian模式的CPU中内存的存放方式为:
0x4000 0x34
0x4001 0x12
而在Big-endian中则为:
0x4000 0x12
采用小端(Little-endian)模式的CPU对操作数的存放方式是从低字节到高字节(从右到左即从低到高);这是X86平台采用的模式;
采用大端(Big-endian)模式对操作数的存放方式是从高字节到低字节;在网络上传送的数据采用的方式;
例如:
16bits宽的数:0x1234在Little-endian模式的CPU中内存的存放方式为:
0x4000 0x34
0x4001 0x12
而在Big-endian中则为:
0x4000 0x12
0x4000 0x34
测试你当前环境的CPU的工作方式(即查看大小端)
#include <stdio.h>#include <stdlib.h>union word{int a;char b;}c;int checkCPU(void){c.a = 1;return (c.b == 1);}int main(void){int i = checkCPU();if ( i==0 ){fprintf(stdout, "this is Big_endian\n");}else if ( i==1 ){fprintf(stdout, "this is Little_endian\n");}return 0;}
为什么可以这样子检测出来呢?这是利用C语言的共同体的特性:所有成员都是从低地址开始存放的。
让我们来分析以上的代码:(假设是在X86,并假设是在低端模式的,然后证明它,即数学上的反证法啦。呵呵)平台下32bits下存放的:
a, b在内存中的排列:
地址 数据(a) 数据(b)
000000001 0x01 0x??
000000002 0x00
000000003 0x00
000000004 0x00
我们在checkCPU中将int a赋值为1.为什么可根据return (c.b == 1)的判定结果来判断大小端呢?注意到,我们没有为c.b赋值,所以它的值会是之前(即a)的数据存放的值。注意到,共同体的特性是:所有成员都是从低地址开始存放的。所以如果是在低端模式下:c.b的值应该是0x01。在高端模式下,c.b的值应该是0x00。所以就可以判断该当前环境的工作的大小端模式了。呵呵。
- 查看CPU的大小端模式
- CPU的大小端模式
- CPU的大小端模式
- CPU的大小端模式
- cpu 大小端模式
- 判断CPU大小端模式
- 判断CPU大小端模式
- Linux查看CPU,硬盘,内存的大小
- 查看CPU Cache大小
- 查看CPU Cache大小
- 查看CPU Cache大小
- cpu的大小端模式【big endian/little endian】
- 用python脚本获取CPU的大小端模式
- c语言检测cpu大小端模式
- CPU架构决定大小端模式
- 判断CPU的大小端
- CPU的大小端问题
- 判断CPU的大小端
- ubuntu 11.10 install QQ
- LINUX下安装 ACE
- 将字符串右边的空白去掉
- c++文件流的复制操作
- [转]Linux2.6内核中基于platform机制的驱动模型
- 查看CPU的大小端模式
- delphi字符函数Copy,Pos,Quotedstr
- 在指定的文件描述符中查找token,
- SSL 与 数字证书 的基本概念和工作原理
- 结构体在内存中的对其规则
- 数据库开发篇(一)——转换日期类型
- Android之Adapter用法总结
- 计算机专业就业率最低:正规军干不过游击队
- windows 2008 NLB 配置(三)