ENDIANNESS
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
Reference #
comments powered by Disqus