1 回答

TA貢獻1802條經(jīng)驗 獲得超4個贊
htons 是把你機器上的整數(shù)轉(zhuǎn)換成“網(wǎng)絡(luò)字節(jié)序”, 網(wǎng)絡(luò)字節(jié)序是 big-endian,也就是整數(shù)的高位字節(jié)在前面。 而我們常用的 x86 CPU (intel, AMD) 電腦是 little-endian,也就是整數(shù)的低位字節(jié)放在前面。舉個例子吧。假定你的port是
0x1234,
在網(wǎng)絡(luò)字節(jié)序里 這個port放到內(nèi)存中就應(yīng)該顯示成
addr addr+1
0x12 0x34
而在x86電腦上,0x1234放到內(nèi)存中實際是:
addr addr+1
0x32 0x12
htons 的用處就是把實際內(nèi)存中的整數(shù)存放方式調(diào)整成“網(wǎng)絡(luò)字節(jié)序”的方式。
再次回樓主,你的問題就是我說的, htons(4367) 后,在x86機器上,就是變成了 3857,就是因為字節(jié)序被調(diào)整了,這是正確的. 4367十六進制是0x110F,由于是little endian所以在內(nèi)存中存放的是
0x0F 0x11
htons后,變成網(wǎng)絡(luò)字節(jié)續(xù),也就是
0x11 0x0F
這個數(shù)字如果你去看了話,就是
3857.
你debug的時候,直接去看端口的內(nèi)存里的內(nèi)容,就明白了。
添加回答
舉報