當前位置:編程學習大全網 - 編程軟體 - 關於htonl函數

關於htonl函數

這個是個字節序轉換函數,具體的比較多,我就摘抄了,反正是壹個轉換而已,不是簡單的轉為網絡字節,主要是因為主機字和網絡字,字序不同~

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

  • 上一篇:兩個定語從句疊加
  • 下一篇:java測試題!!!在線等
  • copyright 2024編程學習大全網