socket程式設計 -- 大端小端區別及轉換
阿新 • • 發佈:2019-01-25
計算機資料儲存有兩種位元組優先順序:高位位元組優先(稱為大端模式)和低位位元組優先(稱為小端模式)。
記憶體的低地址儲存資料的低位元組,高地址儲存資料的高位元組的方式叫小端模式。
記憶體的高地址儲存資料的低位元組,低地址儲存資料高位元組的方式稱為大端模式。
例子:對於記憶體中存放的數0x12345678
來說
如果是採用大端模式存放的,則其真實的數是:0x12345678
如果是採用小端模式存放的,則其真實的數是:0x78563412
如果稱某個系統所採用的位元組序為主機位元組序,則它可能是小端模式的,也可能是大端模式的。
而埠號和IP地址都是以網路位元組序儲存的,不是主機位元組序,網路位元組序都是大端模式。
要把主機位元組序和網路位元組序相互對應起來,需要對這兩個位元組儲存優先順序進行相互轉化。
這裡用到四個函式:htons(),ntohs(),htonl()和ntohl().
這四個地址分別實現網路位元組序和主機位元組序的轉化,這裡的h代表host,n代表network,s代表short,l代表long。
通常16位的IP埠號用s代表,而IP地址用l來代表。
#include <arpa/inet.h>
uint32_t htonl(uint32_t hostlong);
uint16_t htons(uint16_t hostshort);
uint32_t ntohl(uint32_t netlong);
uint16_t ntohs(uint16_t netshort);
htonl 表示 host to network long
,用於將主機 unsigned int
htons 表示
host to network short
,用於將主機 unsigned short
型資料轉換成網路位元組順序; ntohl、ntohs 的功能分別與 htonl、htons 相反。