大端和小端

2021-07-03 15:46:14 字數 1318 閱讀 2574

小端(little endian)儲存:在儲存器中按照最低有效位元組到最高有效位元組的順序儲存物件。

大多數intel相容機採用這種規則。

大端(big endian)規則:在儲存器中按照最高有效位元組到最低有效位元組的順序儲存物件。

大多數ibm和sun microsystems的機器採用這種規則,只是大多數,不是按照企業來劃分,ibm和sun的製造的個人計算機使用的是intel相容的處理器(小端法)。

雙端法(bi-endian):有些比較新的微處理器使用雙端法(bi-endian),可以把它們配置成作為大端或者小端的機器執行。

假設乙個int數值,位於位址0x100處,它的16進製制值是0x01234567,那麼它們在虛擬儲存器中的排列位置如下:

注意:在字0x01234567,高位位元組的十六進製制值為0x01,而低位位元組值為0x67。

但是到底是使用大端還是小端的位元組順序儲存,沒有技術上的差別。對我們來說,機器所使用的位元組順序是完全不可見的,無論為哪種型別的機器編譯的程式都會得到相同的結果。但是位元組順序會成為問題:

在不同型別的機器之間通過網路傳送二進位制的資料時,乙個常見的問題就是當小端法機器產生的資料被送到大端法機器或者反方向傳送時會發現,接收程式字裡的位元組成了反序的。為了避免這個問題,網路應用程式的**編寫必須遵守已經建立的關於位元組順序的規則,以確保傳送方機器將它的內部表示轉換成網路標準,而接收方機器則將網路標準裝換成它的內部表示。

閱讀表示整數資料的位元組序列時位元組順序也很重要,一般是在小端法機器上,當閱讀小端法機器生成的機器級程式時,經常會將位元組按照相反的順序顯示,主要是因為書寫位元組序列的時候從左到右是最低位位元組到最高位位元組(從低位址到高位址),但是書寫數字時則是從左到右從高位到低位,在小端機器上正好相反。

下面的**是由反彙編器生成的,是intel ia32處理器的機器級**的文字表示:

80483bd: 01 05 64 94 04 08 add %eax,0x8049464

可以看出十六進製制字串01 05 64 94 04 08是一條指令的位元組級表示,這條指令把乙個字長的資料加到儲存在主存位址0x8049464的值上。我們可以發現這個位元組序列的後四個位元組就是add指令右邊的數值,但是是相反的順序,這個就是小端法的閱讀上的缺點。

強制型別轉化(cast)時,會發現int型別12345和float型別12345.0,都是4個位元組,但是每個位元組的值不同。

大端和小端

1 小端與大端 對於乙個由2個位元組組成的16位整數,在記憶體中儲存這兩個位元組有兩種方法 一種是將低序位元組儲存在起始位址,這稱為小端 little endian 位元組序 另一種方法是將高序位元組儲存在起始位址,這稱為大端 big endian 位元組序。2 下面是兩個具體例子 記憶體位址 小端...

小端和大端

或許你曾經仔細了解過什麼是大端小端,也動手編寫了測試手頭上的機器上是大端還是小端的程式,甚至還編寫了大端小端轉換程式 但過了一段時間之後,當你再看到大端和小端這兩個字眼,你的腦中很快浮起了自己曾經做過的工作,卻總是想不起究竟哪種是大端 哪種是小端,然後又去查以前寫的記錄?更讓人不快的是,這種經歷反反...

大端和小端

什麼是大端模式,什麼是小端模式?所謂的大端模式 big endian 是指資料的高位元組,儲存在記憶體的低位址中,而資料的低位元組,儲存在記憶體的高位址中,這樣的儲存模式有點兒類似於把資料當作字串順序處理 位址由小向大增加,而資料從高位往低位放 所謂小端模式 little endian 是指資料的高...