判断机器大小端的三种方法

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 *)&num;
// 通过联合体的方式判断大小端不稳定
// 通过指针指向的方式最安全稳定
    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;
}````
posted @ 2024-06-01 17:08  小北bolg  阅读(208)  评论(0)    收藏  举报