📓 Archive

  • Pricing
  • Chess
  • Syntax
  • ENDIANNESS

    Create:2025/03/16 ce4d4e3 Update:2025-03-16

    • Intro(ENDIANNESS | 字节序 | 端序 | 尾序) #

      参考 wiki,记录这个是因为老是记不住,天天查,所以已自己比较容易记忆的方式将其记录下来,动手过一遍,避免胡翻乱找。

      字节序分为大端(Big)和小端(Little)
      高位低地址,低位高地址被称为大端序(Big   ),参考下图可以理解为 顺序放置
      低位低地址,高位高地址被称为小端序(Little),参考下图可以理解为 逆序放置

      大小端序出现的背景:
      计算机都是从低位往高位读取字节数据,而且方便处理,所以出现了小端序。但是小端序不符合人类的阅读习惯,且除了计算机内部之外,其他场合几乎都是大端字节序,比如网络传输一般采用大端序,也被称为 网络字节序,或 网络序。有 Berkeley套接字 定义了一组转换函数,用于 16 和 32 位整数在网络序和本机字节序之间的转换。htonl(Host to Network Long(4Byte)),htons(Host to Network Short(2Byte))用于本机序转换到网络序;ntohl,ntohs用于网络序转换到本机序。

      • 检测处理器字节序 #

        Note

        使用 C 语言程序即可验证:定义一个整形值int num = 1 = 0x 0000 0000 0000 0001;,然后强转成字符指针,取第一个字符(1 Byte)判断是否为 0,(小端逆序放置为 1,大端为 0)。
        编辑如下代码为 endian.c
        编译运行:gcc endian.c -o endian && ./endian

        #include <stdio.h>
        
        int main(){
            unsigned int num = 1;
            char *ptr = (char*) &num;
        
            if (*ptr) printf("Little\n");
            else printf("Big\n");
        
            return 0;
        }
        
    • Reference #


    comments powered by Disqus