union Un
{
int a;
char b;
};
int main(void)
{
union Un un;
un.a = 0x12345678; // 此时内存空间确实为0x12345678,但是更改0x78(例如改成0x99)的值会导致判断失误
if (un.b == 0x78) // 具体取决于编译器对联合体的处理方式
{ // 这种方法假设了字符成员 b 的位置与整型成员 a 的低位字节是对应的,这在不同系统上可能并不成立
printf("小端存储 \n");
}
else
{
printf("大端存储 \n");
}
return 0;
}
#include <stdio.h>
int main(void) {
int num = 0x12345678;
char *ptr = (char *)#
// 通过联合体的方式判断大小端不稳定
// 通过指针指向的方式最安全稳定
if (*ptr == 0x78) {
printf("小端存储\n");
} else {
printf("大端存储\n");
}
return 0;
}
// 还有一种方法是通过打印整形字符串来查看是什么方式存储的
#include <stdio.h>
int main(void)
{
int num = 0x12345678;
printf("%hhx\n", num); // half ,截取一半字节输出
//输出78表示小端存储
//输出12表示大端存储
return 0;
}````
标签:小端,存储,机器,int,端的,num,三种,printf,0x12345678
From: https://www.cnblogs.com/ikunkunkun/p/18226154