字节序(Endianness)、大端(big-endian)、小端(little-endian)
常见的字节序(Endianness)主要有大端(big-endian)和小端(little-endian)两种。big-endian 大在高字节(most significant byte)放在内存的低地址,little-endian 小在低字节(least significant byte)放在内存的低地址。
[blockquote]
decreasing numeric significance with increasing memory addresses (or increasing time), known as big-endian,and increasing numeric significance with increasing memory addresses (or increasing time), known as little-endian.
[/blockquote]
示意图
C语言示例
运行时检查大小端
const int i = 1; #define is_bigendian() ( (*(char*)&i) == 0 )
网络序(Networking)
网络传输一般采用大端序,也被称之为网络字节序,或网络序。IP协议中定义大端序为网络字节序。 Berkeley套接字定义了一组转换函数,用于16和32bit整数在网络序和本机字节序之间的转换。htonl,htons用于本机序转换到网络序;ntohl,ntohs用于网络序转换到本机序。
位序(Bit endianness)
位序和字节序原理类似,不同的是关注点在位上而非字节。一般用于描述串行设备的传输顺序,大多使用大端序(most significant bit goes first),但需要注意的是以下串行总线使用的是小端序(least significant bit goes first):RS-232、RS-422、RS-485、USB、Ethernet。
References
1. Endianness
Copyright (C) 2016 archiexie@cnblogs. All Rights Reserved.
相关推荐
<1> 我一直以为自己很熟悉如何使用C/C++中的二进制文件,可今天测试的时候突然发现程序生成的二进制文件和文本文件一样。也就是说保存125这个数字还是会占用3个字节,而不是我想象中那样只占一个字节!