1 回答

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