知道為什么需要htons(), ntohl(), ntohs(),htons() 函數(shù)嗎?
在C/C++寫網(wǎng)絡(luò)程序的時(shí)候,往往會(huì)遇到字節(jié)的網(wǎng)絡(luò)順序和主機(jī)順序的問題。這是就可能用到htons(), ntohl(), ntohs(),htons()這4個(gè)函數(shù)。
網(wǎng)絡(luò)字節(jié)順序與本地字節(jié)順序之間的轉(zhuǎn)換函數(shù):
1
htonl()--"Host to Network Long"
2
ntohl()--"Network to Host Long"
3
htons()--"Host to Network Short"
4
ntohs()--"Network to Host Short"
之所以需要這些函數(shù)是因?yàn)橛?jì)算機(jī)數(shù)據(jù)表示存在兩種字節(jié)順序:NBO與HBO
網(wǎng)絡(luò)字節(jié)順序NBO(Network Byte Order):
按從高到低的順序存儲(chǔ),在網(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)換。
PS:轉(zhuǎn)自
http://www.cnblogs.com/heaad/archive/2009/07/16/1525112.html