例如:
数字1在内存中存储的方式分为两种:
[00 00 00 01] 大端字节序
[01 00 00 00] 小端字节序
一、使用指针判断:
#include<stdio.h>
int check_sys()
{
int n = 1;
if (1 == *(char *)&n)
{
return 1;
}
else
{
return 0;
}
}
int main()
{
int a[4] = { 1, 2, 3, 4 };
int *ptr1 = (int *)(&a + 1);
int *ptr2 = (int *)((int)a + 1);
printf("%x,%x ", ptr1[-1], *ptr2);
int ret = check_sys();
if (ret == 1)
{
printf("little\n");
}
else
{
printf("big\n");
}
system("pause");
return 0;
}
二、使用union(联合)判断
联合这个关键字,定义类型的特点是:
通过类型创建的变量,所有的变量共用一块空间,所有的变量起始的地址都是相同的。如果用UN创建un,在内存开辟空间的时候为un开辟了一块空间,该空间的大小必须是所有成员中最大的成员所占的空间。在联合的成员中,同一段时间只能使用一个成员,以免发生冲突。
#include<stdio.h>
int check_sys()
{
union UN
{
char c;//1
int i;//4
}un;
un.i = 1;
if (un.c == 1)
{
return 1;
}
else
{
return 0;
}
}
int main()
{
int a[4] = { 1, 2, 3, 4 };
int *ptr1 = (int *)(&a + 1);
int *ptr2 = (int *)((int)a + 1);
printf("%x,%x ", ptr1[-1], *ptr2);
int ret = check_sys();
if (ret == 1)
{
printf("little\n");
}
else
{
printf("big\n");
}
system("pause");
return 0;
}