大尾端 小尾端和 htons函式

2021-07-10 03:33:22 字數 1055 閱讀 6707

提到體系結構時,經常遇到大小尾端的概念,這裡做個總結。

big endian:大尾端,也稱大端(高位)優先儲存。

little endian:小尾端,也稱小端(低位)優先儲存。

如下00000000 00000000 00000000 00000001的儲存

大尾端: 00000000 00000000 00000000 00000001

addr+0    addr+1     addr+2   addr+3     //先存高有效位(在低位址)

小尾端: 00000001 00000000 00000000 00000000

addr+0    addr+1     addr+2   addr+3     //先存低有效位(在低位址)

故要判斷機器的體系結構是大尾端還是小尾端,以下程式可以完成任務:

#include 

int main()

else

return 0;

}

在linux和windows網路程式設計時需要用到htons和htonl函式,用來將主機位元組順序轉換為網路位元組順序。

在intel機器下,執行以下程式

int main()

得到的結果是4096,初一看感覺很怪。

解釋如下,數字16的16進製表示為0x0010,數字4096的16進製表示為0x1000。 由於intel機器是小尾端,儲存數字16時實際順序為1000,

儲存4096時實際順序為0010。因此在傳送網路包時為了報文中資料為0010,需要經過htons進行位元組轉換。如果用ibm等大尾端機器,則沒有這種位元組順序轉換,但為了程式的可移植性,也最好用這個函式。

另外用注意,數字所佔位數小於或等於乙個位元組(8 bits)時,不要用htons轉換。這是因為對於主機來說,大小尾端的最小單位為位元組(byte)。

16    -  00000000 00001000 

4096 - 00001000 00000000

小尾端和大尾端及htons函式解釋

big endian 大尾端,也稱大端 高位 優先儲存。little endian 小尾端,也稱小端 低位 優先儲存。是按照高位位元組和地位位元組儲存的,不是位。如下00000000 00000000 00000000 00000001的儲存 大尾端 00000000 00000000 000000...

NAND FLASH大頁和小頁的區別

nand flash有兩類 大頁的nand和小頁的nand。每種nand的一頁中都有資料段 datafield 和附加段 spare field datafield用於存放資料用的,spare field 讀寫操作的時候存放校驗碼用的,大頁的nand中資料段2048b 附加段64b 小頁的nand中...

OLAP 大表和小表並行hash join

乙個表50mb 乙個表10gb 50m表做驅動表,放在pga裡 這時候慢在對對 10g 的全表掃瞄 對10個g掃瞄塊 需要開並行 我有這樣乙個演算法 乙個程序 讀 50mb 8程序 來 掃瞄 10gb 乙個 程序掃瞄 1.25gb 50mb 都分發到 8個程序 超大表和小表之間做hash join,...