《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地址。


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