大端與小端

2021-05-25 12:49:25 字數 715 閱讀 4255

大端表示跟小端表示這兩者的具體意義我老是記不住,當然不是說它的意思不懂,而只是容易搞混。現在記一下,以後就比較有印象了。:)

在c++中,定義乙個int值的時候,它所占用的記憶體是4個位元組,然而這4個位元組裡面,我們如果得到這個int值的記憶體位址,其實就是它的最低位置的位址,如:

int a;

假設 a的記憶體分別是 0x0 0x1 0x2 0x3 這4個位址上,每個位址裡面存的數是怎樣的我們並不知道,只知道總之拿這四個位元組去用就是乙個值準沒錯,的確是這樣,但是也有例外,當這4個位元組跨平台跨機器的時候就會出現問題了。

這種情況也不罕見,例如在網路程式設計中就比較多時候會遇到:當客戶端的語言跟伺服器的語言不一致的情況下,就會出現這種問題。所以就要理解到底會出現什麼情況了。

大端法:數值的低位放在記憶體的高位置上,例如0x12345678,其記憶體分配是這樣的: 0x0: 12 | 0x1:34 | 0x2:56 | 0x3:78  (同時也稱網路序)

小端法:數值的低位放在記憶體的低位,這跟我們平時寫數學的時候寫法是一樣的,高地位放數值的高位,低位址放數值的低位, 0x12345678 記憶體圖:0x0:78|0x1:56|0x2:34|0x3:12 (同時也稱主機序)

ps:我用g++的時候,用的序列是小端序列~

當小端序表示的乙個數值發給客戶端,上例的0x12345678發過去給客戶端,剛好客戶端的解讀方式是小端序,那麼會把資料當成0x78563412來讀,後果可想而知。。。 所以~~~要注意了。

大端與小端

網際網路使用網路位元組順序採用大端模式進行編址,大端儲存也稱為網路位元組序,因為tcp ip包在網路中傳輸時都要求以這種次序,以其他形式儲存資料的機器 主機位元組順序根據處理器的不同而不同,如powerpc處理器,使用大端模式,而pentuim處理器使用小端模式 則必須在傳送資料之前把首部轉換成網路...

大端與小端

端模式 endian 的這個詞出自 jonathan swift 書寫的 格列佛遊記 這本書根據將雞蛋敲開的方法不同將所有的人分為兩類,從圓頭開始將雞蛋敲開的人被歸為 big endian 從尖頭開始將雞蛋敲開的人被歸為 littile endian 小人國的內戰就源於吃雞蛋時是究竟從大頭 big ...

大端與小端

用例 include bool isbigend bool isbigending obj obj.a 0x1234 if obj.b 0x12 return true else return false int main 分析 union 是利用了它的性質 所有成員從低位址開始存放 小端 0x00...