乙個int型整數,一般情況下佔4個位元組。那麼這4個位元組在記憶體中是怎麼排列的呢?低記憶體位址存放的是低位位元組還是高位子節呢?這就涉及到大端規則和小端規則。
這是乙個特別小特別基礎的知識點,在大部分的日常開發中,我們並不需要理會大小端規則。但是當涉及到跨平台網路資料傳輸的時候,就需要考慮大小端規則了。
將高位位元組儲存在低位位址,低位位元組儲存在高位位址,這種儲存方式成為大端規則,也稱為大端序。
以0xa1a2a3a4
為例,使用大端規則,記憶體排列如下:
低位址 ——>
——>
——>
——> 高低位址
0xa1
0xa2
0xa3
0xa4
將低位位元組儲存在低位位址,高位位元組儲存在高位位址,這種儲存方式成為小端規則,也稱為小端序。
以0xa1a2a3a4
為例,使用小端規則,記憶體排列如下:
低位址 ——>
——>
——>
——> 高低位址
0xa4
0xa3
0xa2
0xa1
不同平台使用不同的子節序。為了保證網路傳輸的資料能夠被所有平台正確讀取,tcp網路傳輸統一採用大端規則。
如果你使用c/c++/objective-c語言,有幾個方法可以方便將本地子節序和網路子節序互相轉換。
// 網路子節序 -> 本地子節序ntohs(x)
// 轉換short型別
ntohl(x)
// 轉換long型別
ntohll(x)
// 轉換long long型別
// 本地子節序 -> 網路子節序
htons(x)
// 轉換short型別
htonl(x)
// 轉換long型別
htonll(x)
// 轉換long long型別
判斷主機位元組序大端規則或小端規則方法
在計算機儲存中儲存位元組的順序有兩種分別為大端規則和小端規則。有乙個32位數字為 0x01020304 在小端規則的機器上,其儲存如下 低位址 高位址0x04 0x03 0x02 0x01 在大端規則機器上,其儲存如下 低位址 高位址0x01 0x02 0x03 0x04 判斷當前機器為大端規則還是...
大端和小端
1 小端與大端 對於乙個由2個位元組組成的16位整數,在記憶體中儲存這兩個位元組有兩種方法 一種是將低序位元組儲存在起始位址,這稱為小端 little endian 位元組序 另一種方法是將高序位元組儲存在起始位址,這稱為大端 big endian 位元組序。2 下面是兩個具體例子 記憶體位址 小端...
大端和小端
小端 little endian 儲存 在儲存器中按照最低有效位元組到最高有效位元組的順序儲存物件。大多數intel相容機採用這種規則。大端 big endian 規則 在儲存器中按照最高有效位元組到最低有效位元組的順序儲存物件。大多數ibm和sun microsystems的機器採用這種規則,只是...