2 回答

TA貢獻1866條經驗 獲得超5個贊
htons 是把你機器上的整數轉換成“網絡字節序”, 網絡字節序是 big-endian,也就是整數的高位字節在前面。 而我們常用的 x86 CPU (intel, AMD) 電腦是 little-endian,也就是整數的低位字節放在前面。舉個例子吧。假定你的port是
0x1234,
在網絡字節序里 這個port放到內存中就應該顯示成
addr addr+1
0x12 0x34
而在x86電腦上,0x1234放到內存中實際是:
addr addr+1
0x32 0x12
htons 的用處就是把實際內存中的整數存放方式調整成“網絡字節序”的方式。
再次回樓主,你的問題就是我說的, htons(4367) 后,在x86機器上,就是變成了 3857,就是因為字節序被調整了,這是正確的. 4367十六進制是0x110F,由于是little endian所以在內存中存放的是
0x0F 0x11
htons后,變成網絡字節續,也就是
0x11 0x0F
這個數字如果你去看了話,就是
3857.

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