《Linux环境下C编程指南(第二版)》 2012-10-27读书笔记 字节序汇总

《Linux环境下C编程指南(第二版)》p256
计算机在内存中的数据存储方式有两种:一种是小端字节序,即内存低地址存储数据低字节,高地址存储数据高字节;另外一种是大端字节序,即内存低地址存储数据高字节,而高地址存储数据低字节。
如下图所示:

网络字节序使用的是大端字节序。某个给定系统所采用的是字节序是主机字节序,他可能是小端字节序(xp、ubuntu等),也可能是大端字节序(aix)。在网络协议中处理多字节数据(比如int类型数据)采用的都是网络字节序,而不是主机字节序。要把主机字节序和网络字节序相对应,就要用到提供主机字节序和网络字节序之间相互转换功能的函数。
#include <netinet/in.h>
uint16_t htons(uint16_t hostvalue);
uint32_t htonl(uint32_t hostvalue);
返回网络字节序

#include <netinet/in.h>
uint16_t ntohs(uint16_t netvalue);
uint32_t ntohl(uint32_t netvalue);
返回主机字节序

以上函数中,h表示host,n表示network,s表示short,l表示long。一般情况下,使用htos和ntohs转换端口号,使用htonl和ntohl转换IP地址。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章