java -- Big Endian and Little Endian 大端和小端概念讲解及如何转换
什么是大端、小端?
字節是計算機中數據處理的基本單位。
計算機中以字節為單位存儲和解釋信息,規定一個字節由八個二進制位構成,即1個字節等于8個比特(1Byte=8bit)。
計算機進行數據處理時,一次存取、加工和傳送的數據長度稱為字(word)。一個字通常由一個或多個(一般是字節的整數位)字節構成。
但并非所有計算機都以相同的順序存儲由多字節值組成的字節??紤]一個由2個字節組成的16位因特網。存儲該值有兩種方式
- Little Endian 小端: 低階字節存儲在起始地址(A),高階字節存儲在下一個地址(A + 1)
- Big Endian 大端:高階字節存儲在起始地址(A),低階字節存儲在下一個地址(A + 1)
網絡字節順序: 為了允許具有不同字節順序約定的計算機相互通信,Internet協議為在網絡上傳輸的數據指定了規范的字節順序約定。
network order 即網絡序,默認網絡傳輸字節為大端
小端和大端是存儲多字節數據類型(int、float等)的兩種方式
- 計算機內存由正整數地址引用。在計算機內存中,把最低有效字節放在最高有效字節之前存儲數字是“自然的”。
“自然”順序,即在內存中較低有效字節出現在較高有效字節之前。自然順序是采用小端方式存儲- 基于英特爾的處理器是小端。ARM處理器是小端處理器。
- 但許多供應商,如IBM、CRAY和Sun,更喜歡采用相反的順序存儲數據,即采用大端方式存儲。
- 雙端處理器可以在小端和大端兩種模式下運行。當前的一代ARM處理器是雙端處理器。
根據這些定義,一種32位數據模式,它被視為32位無符號整數。“高階”字節是2的最大次方:231,…, 224?!暗碗A”字節是2的最小次方: 27,…, 20。
示例如下:
- MSB:全稱為Most Significant Bit,在二進制數中屬于最高有效位,MSB是最高加權位,與十進制數字中最左邊的一位類似。
- LSB:全稱為Least Significant Bit,在二進制數中意為最低有效位,
一般來說,MSB位于二進制數的最左側,LSB位于二進制數的最右側。
字節順序是否影響文件格式?
- 以1字節為基本單位的文件格式獨立于字節順序,例如ASCII文件。
- 其他文件格式使用一些固定的端順序格式,例如JPEG文件以大端順序格式存儲。
- java 全部為大端(與平臺無關): Java二進制文件中的所有內容都以大端順序存儲。這意味著如果您只使用Java,那么所有文件在所有平臺(Mac、PC、UNIX等)上的處理方式都是相同的。
- C語言默認是小端模式:用C語言編寫的程序通常使用 小端順序
如何知道機器的字節次序
How to Know the Endian-ness?
在Java中,我們可以使用ByteOrder.nativeOrder()方法來獲取CPU使用的字節順序。在使用Intel CPU 或 AMD CPU時,輸出結果都是小端順序
如何進行大小端的轉換
在java中,可以基于ByteBuffer提供的order方法,進行大小端的轉換
如處理網絡字節流時,先針對獲取的byte[] 進行 buffer.order(ByteOrder.BIG_ENDIAN);
總結
以上是生活随笔為你收集整理的java -- Big Endian and Little Endian 大端和小端概念讲解及如何转换的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 实例:用C#.NET手把手教你做微信公众
- 下一篇: CDN详解