网络字节与主机字节转换 htons(), ntohl(), ntohs(),htons() 函数
???在C/C++寫網(wǎng)絡(luò)程序的時(shí)候,往往會遇到字節(jié)的網(wǎng)絡(luò)順序和主機(jī)順序的問題。這是就可能用到htons(), ntohl(), ntohs(),htons()這4個(gè)函數(shù)。
網(wǎng)絡(luò)字節(jié)順序與本地字節(jié)順序之間的轉(zhuǎn)換函數(shù):
htonl()--"Host to Network Long"??????ntohl()--"Network to Host Long"
??????htons()--"Host to Network Short"
??????ntohs()--"Network to Host Short"
之所以需要這些函數(shù)是因?yàn)橛?jì)算機(jī)數(shù)據(jù)表示存在兩種字節(jié)順序:NBO與HBO
網(wǎng)絡(luò)字節(jié)順序NBO(Network Byte Order):
??????按從高到低的順序存儲,在網(wǎng)絡(luò)上使用統(tǒng)一的網(wǎng)絡(luò)字節(jié)順序,可以避免兼容性問題。
主機(jī)字節(jié)順序(HBO,Host Byte Order):
??????不同的機(jī)器HBO不相同,與CPU設(shè)計(jì)有關(guān),數(shù)據(jù)的順序是由cpu決定的,而與操作系統(tǒng)無關(guān)。?
如 Intel?? x86結(jié)構(gòu)下,short型數(shù)0x1234表示為34?? 12,?int型數(shù)0x12345678表示為78?? 56?? 34?? 12???
如IBM?? power PC結(jié)構(gòu)下,short型數(shù)0x1234表示為12?? 34,?int型數(shù)0x12345678表示為12?? 34?? 56?? 78
???
??????由于這個(gè)原因不同體系結(jié)構(gòu)的機(jī)器之間無法通信,所以要轉(zhuǎn)換成一種約定的數(shù)序,也就是網(wǎng)絡(luò)字節(jié)順序,其實(shí)就是如同power?? pc那樣的順序 。在PC開發(fā)中有ntohl和htonl函數(shù)可以用來進(jìn)行網(wǎng)絡(luò)字節(jié)和主機(jī)字節(jié)的轉(zhuǎn)換。
轉(zhuǎn)載于:https://www.cnblogs.com/nimorl/archive/2013/04/24/3039488.html
總結(jié)
以上是生活随笔為你收集整理的网络字节与主机字节转换 htons(), ntohl(), ntohs(),htons() 函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python 之 字符编码 和 中文显示
- 下一篇: HDOJ 3714