如何判断计算机大小端
作者:互联网
这里先介绍一下什么是大小端
大端(存储)模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中
小端(存储)模式,是指数据的低位保存在内存的低地址中,而数据的高位,保存在内存的高地址中
对于int a = 0x11223344
内存 【】 【】 【】 【】 【】 【】是由低到高的
存放方式为 【11】【22】【 33】 【44】 就是小端
存放方式为 【44】【33】【 22】 【11】就是大端
现在我们判断在计算机中内存的存储到底是大端还是小端
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
//判断大小端
int main()
{
int a = 1;
//1的16进制为 00 00 00 01
//如果为大端则存储地址应为 00 00 00 01
//如果为小端则存储地址应为 01 00 00 00
//所以判断大小端只需要将首地址取出并解引用即可
//从指针的解引用可以知道char*类型的指针访问一个字节的地址,
//所以我们将int类型的地址转换为char*类型,然后再对它解引用,
//如果为1则为小端,为0则为大端
//这里定义一个int类型的p用来存放首地址
int p = *((char*)&a);
if (p == 1)
{
printf("小端");
}
else
{
printf("大端");
}
return 0;
}
说到判断大小端问题,这里引用一个知识,共用体
联合的成员是共用同一块内存空间的,这样一个联合变量的大小,至少是最大成员的大小(因为联合至少得有能力保存最大的那个成员)
我们也可以用共用体来判断大小端,这样更加方便。
#include<stdio.h>
int Duan()
{
//定义一个匿名共用体
//用过一次就不用管了,节省空间
//还是以1为例 00 00 00 01
union
{
//使a=1,所以内存占比假设为 01 00 00 00
int a;
//那么对于char i 来说 它所占内存地址就为01 ,这时我们可以判断i的值来确定大小端
char i;
}u; //定义一个共用体变量u
u.a = 1;
return u.i;
}
int main()
{
int ret = Duan();
if (ret == 1)
{
printf("小端");
}
else
{
printf("大端");
}
return 0;
}
标签:小端,00,判断,计算机,int,地址,01,内存,大小 来源: https://blog.csdn.net/qq_48720506/article/details/121265708