众所周知,对于数据超过一个字节的数据,在计算机中的存储需要跨越字节。某些机器选择在存储器中按照从最低为有效字节到最高有效字节的顺序存储对象,而另一些机器则按照从最高为有效字节到到最低为有效字节的顺序存储,前一种存储方式被称为小端存储,后一种方式被称为大端存储。
判断机器是大端存储还是小端存储,他的实现代码非常简单,下面,我将介绍三种方式,从而让大家判断:
第一种:不分装函数,直接在main函数内进行定义
#include<stdio.h>
int main()
{
int i = 1;
if (*(char *)&i == 1)
//对i进行强制类型转换,char型的数据解引用只能访问一个字节
//8位二进制存储
//00 00 00 01
{
printf("小端\n");
}
else
{
printf("大端\n");
}
system("pause");
return 0;
}
第二种方法:在main外封装一个函数
#include<stdio.h>
int check_sys()
{
int i = 1;
int ret;
if (*(char *)&i == 1)
{
ret = 1;//小端存储
}
else
{
ret = 0;//大端存储
}
}
int main()
{
int tmp = check_sys();
if (tmp == 1)
{
printf("小端\n");
}
else
{
printf("大端\n");
}
system("pause");
return 0;
}
在此部分,可直接将封装函数中的if else省略,直接让其返回return *(char *)&i;
即可,这样更大程度的提高了程序的运行速率,节省了时间。
第三种方法:利用联合,判断数据的存储方式。
联合的基本概念:联合的所有成员在内存块中占相同的位置,对其的类型,与结构体类似,可以参考前面所说的结构体。
在一个成员长度不同的联合里,分配给联合的内存数量取决于它的最大成员的大小
int check_sys()
{
union UN
{
int i;//可访问四个字节
char c;//仅可以访问一个字节
}u;
u.i = 1;
return u.c;
}
int main()
{
int ret = check_sys();
if (ret==1)
{
printf("小端\n");
}
else
{
printf("大端\n");
}
system("pause");
return 0;
}
每台机器各有不同,可以通过此种方式,从而确定自己所使用机器在存储数据时的不同。
希望这些可以帮助到大家,在今后的学习中一起进步。
具体如图所示:
学习的路上,永不停歇!!!