大端和小端小记

肾么是大小端?

image
image

各有什么优势?

众所周知,正负号存在数字中的高位,所以大端第一个字节存的就是最高的数字字节,对于判断正负来说,大端更适合,同时,网络字节序采用的是大端存储;而对于小端来说,无论是1个字节、2个字节、4个字节,这些数字其实都是一样的,这在做类型转换时十分方便,同时,做算术运算时将每个字节拿出来运算直到高位,并且最终刷新符号位,这样运算会更加高效

怎么写一个程序判断主机字节序?

void testendian() {
    int a = 0x12345678;
    // 1. 直接指针
    char* p = (char*)&a;
    if (*p == 0x78)
        cout << "little endian" << endl;
    else
        cout << "big endian" << endl;

    // 用一下联合体
    union Un {
        char c;
        int i;
    };

    Un un;
    un.i = 0x12345678;
    if (un.c == 0x78)
        cout << "little endian" << endl;
    else
        cout << "big endian" << endl;
}

引用

大小端字节序存在的意义,为什么不用一个标准呢? “字节序”是个什么鬼? C语言判断大小端模式