背景知识
- 计算机系统中以字节为单位。
- 一个字节为8bit
- 每个字节对应一个地址单元。
大端 & 小端
- 大端模式(big-endian)
数据的低位保存在内存的高地址
数据的高位保存在内存的低地址
以32bit宽的数0x12345678举例:
http://blog.csdn.net/zhaoshuzhaoshu/article/details/37600857/
- 小端模式(little-endian)
数据的低位保存在内存的低地址
数据的高位保存在内存的高地址
以32bit宽的数0x12345678举例:
http://blog.csdn.net/zhaoshuzhaoshu/article/details/37600857/
- 大端 & 小端的另一种称呼
http://www.cnblogs.com/wuyuegb2312/archive/2013/06/08/3126510.html
理解之后,总结一下,记忆的方法是:
(数据看成字符串)大端——高尾端,小端——低尾端
本机字节序 & 网络字节序
- 本机字节序
可能为小端模式或大端模式。
如Intel的x86处理器,多字节是用little-endian型式。 - 网络字节序
网络上传输的数据存储模式为大端模式。
常用字节序转换函数
- htonl() - host to network unsigned long
The htonl function converts a u_long from host to TCP/IP network byte order (which is big-endian).
本函数将一个32位数从主机字节顺序转换成网络字节顺序。
- ntohl() - network to host unsigned long
The htons function converts a u_short from host to TCP/IP network byte order (which is big-endian).
- htons() - host to network unsigned short
- ntohs() - network to host unsigned short
References:
http://blog.csdn.net/zhaoshuzhaoshu/article/details/37600857/
http://www.cnblogs.com/wuyuegb2312/archive/2013/06/08/3126510.html