字节序(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.

相关推荐