如何判断自己电脑数据存放模式呢,首先数据存放模式有两种,一种叫做大端模式,一种叫小端模式;什么是大端模式,小端模式呢,LOOK!! -->>
大端模式:低地址处,存放高位;高地址处,存放低位;
小端模式:低地址处,存放低位;高地址处,存放高位;
也就是说,只要可以检测出,一个数据的低地址处,存放的是数据低位,还是高位就可以了,下来是一个简单测试程序:
【代码实现】
【方法1】
#include <stdio.h> int check_bit(int *p) { char *p_bit=(char *)p;//强制类型转换让*p_bit只能访问p一个字节 if (*p_bit == 1) { return 1;//低位存放在低地址 } else { return 0;//低位存放在高地址 } } int main() { int a=1; int *p=&a; int ret=check_bit(p); if(ret==1) { printf("little\n");//小端 } else printf("bigger\n");//大端 return 0; }
结果:
【分析过程】
【方法2】
由于它只需要检测内存中一个字节中存放的数据,所以这里可以巧妙的运用联合体的一个特性;
什么是联合体?
联合体的定义:
定义一个联合类型的一般形式为:
union 联合名
{
成员表
};
成员表中含有若干成员,成员的一般形式为: 类型说明符 成员名 成员名的命名应符合标识符的规定。
联合体中可以定义不同类型的变量,但是内存分配是按照占用内存最大的类型来分配空间的,每个变量都在这块空间里面放着。
#include <stdio.h> int check_bit() { union UN { char c; int i; }un; un.i=1; //初始化i 二进制(32位)表示:00000000 00000000 00000000 00000001 if (un.c==1) { return 1;//c是char类型,只访问一个字节 } else return 0; } int main() { int ret=check_bit(); if (ret==1) { printf("little\n");//小端 } else printf("bigger\n");//大端 return 0; }
结果:
【分析过程】
本文出自 “Pzd流川枫” 博客,请务必保留此出处http://xujiafan.blog.51cto.com/10778767/1719750
原文:http://xujiafan.blog.51cto.com/10778767/1719750