大端还是小端

August 10, 2020
c

c 语言代码判断机器是大端还是小端:

#include <stdio.h>

// 使用类型转换判断大小端
char* endian_by_cast()
{
        int v = 0x0100;
        if ((char)v == 1)
        {
                return "Big Endian";
        }
        else {
                return "Little Endian";
        }
}

// 使用联合体判断大小端
char* endian_by_union()
{
        union u {
                int a;
                char b;
        } u1;
        u1.a = 0x0;
        u1.a = 0x0001;
        if (u1.b == 1) {
                return "Little Endian";
        }
        else {
                return "Big Endian";
        }
}

int main()
{

        printf("endian_by_cast(): %s.\n", endian());
        printf("endian_by_union(): %s.\n", endian_by_union());

        return 0;
}

可以通过 gdb 的 x 命令查看内存内容:

参考:
阮一峰的网络日志 - 理解字节序
Examining Memory

链表中环的检测

链表 c

移除链表倒数第N个节点

链表 c

两个有序链表的合并

链表 c