1. 程式人生 > >Linux網絡編程---htons函數的使用

Linux網絡編程---htons函數的使用

.com vc++6.0 nbsp 技術分享 item 原來 時有 htons lin

htons是將整型變量從主機字節順序轉變成網絡字節順序, 就是整數在地址空間存儲方式變為高位字節存放在內存的低地址處。

htonl就是把本機字節順序轉化為網絡字節順序
所謂網絡字節順序(大尾順序)就是指一個數在內存中存儲的時候“高對低,低對高”(即一個數的高位字節存放於低地址單元,低位字節存放在高地址單元中)。但是計算機的內存存儲數據時有可能是大尾順序或者小尾順序。
先舉個例子:
int a = 0x403214;
int b = htonl(a);
我在VC++6.0調試這段代碼,發現
&a的值為:0x0012ff44
其中0x0012ff44、0x0012ff45、0x0012ff46、0x0012ff47這四個單元的值依次為:14、32、40、00,即0x403214這個數的高位部分存放在高位地址中,低位部分存放在低位地址中,即小尾順序。

&b的值為:0x0012ff40
其中0x0012ff40、0x0012ff41、0x0012ff42、0x0012ff43這四個單元的值依次為:00、40、32、14,即把原數0x403214的高位部分存放在低位地址中,低位部分存放在高位地址中。
由此可見,如果一個數以小尾順序存儲,經htonl函數調用後這個數的高地位字節會完全顛倒過來成為一個新的數。這個新的數在機器內部其實還是以小尾順序存儲的,但是相對於原來的數而言相當於是變成大尾順序的了。
long型的0x40寫完整為:0x 00 00 00 40,共四個字節,調用htonl後四個字節顛倒順序,為0x 40 00 00 00。
同樣,0x40 00 00 00調用htonl後變為0x 00 00 00 40,即0x40

舉例:

技術分享圖片




Linux網絡編程---htons函數的使用