【c++】htons、ntohs、htonl、ntohl

在寫Linux Socket編程時經常用到上述函數,常見的用法是:

struct sockaddr_in addr;

addr.sin_family = AF_INET;
addr.sin_port = htons(port);
addr.sin_addr.s_addr = inet_addr(ip.c_str());

htons,host to network short int
ntohs,network to host short int
htonl,host to network long int
ntohl,network to host long int

可以看出上述幾個方法用於網絡字節序和主機字節序的相互轉換。那麼需要理解網絡字節序和主機字節序:

網絡字節順序NBO(Networkd Byte Order):按從高到低的順序存儲,即小端模式;
主機字節順序HBO(Host Byte Order):主機的字節順序與與CPU設計有關,數據的順序是由cpu決定。

由於這個原因不同體系結構的機器之間無法通信,所以要轉換成一種約定的順序,也就是網絡字節順序 。

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