(转)挺好的一篇介绍字节序的文章
轉自:http://www.cnblogs.com/JeffreyZhao/archive/2010/02/10/byte-order-and-related-library.html
?
說到程序間的通信,說到底便是發送數據流。我們一般把字節(byte)看作是數據的最小單位。當然,其實一個字節中還包含8個比特(bit)──有時候我奇怪為什么很多朋友會不知道bit或是它和byte的關系。當我們拿到一系列byte的時候,它本身其實是沒有意義的,有意義的只是“識別字節的方式”。例如,同樣4個字節的數據,我們可以把它看作是1個32位整數、2個Unicode、或者字符4個ASCII字符。
同樣我們知道,在一個32位的CPU中“字長”為32個bit,也就是4個byte。在這樣的CPU中,總是以4字節對齊的方式來讀取或寫入內存,那么同樣這4個字節的數據是以什么順序保存在內存中的呢?例如,現在我們要向內存地址為a的地方寫入數據0x0A0B0C0D,那么這4個字節分別落在哪個地址的內存上呢?這就涉及到字節序的問題了。
每個數據都有所謂的“有效位(significant byte)”,它的意思是“表示這個數據所用的字節”。例如一個32位整數,它的有效位就是4個字節。而對于0x0A0B0C0D來說,它的有效位從高到低便是0A、0B、0C及0D——這里您可以把它作為一個256進制的數來看(相對于我們平時所用的10進制數)。
而所謂大字節序(big endian),便是指其“最高有效位(most significant byte)”落在低地址上的存儲方式。例如像地址a寫入0x0A0B0C0D之后,在內存中的數據便是:
而對于小字節序(little endian)來說就正好相反了,它把“最低有效位(least significant byte)”放在低地址上。例如:
對于我們常用的CPU架構,如Intel,AMD的CPU使用的都是小字節序,而例如Mac OS以前所使用的Power PC使用的便是大字節序(不過現在Mac OS也使用Intel的CPU了)。此外,除了大字節序和小字節序之外,還有一種很少見的中字節序(middle endian),它會以2143的方式來保存數據(相對于大字節序的1234及小字節序的4321)。
轉載于:https://www.cnblogs.com/candyboy/archive/2010/05/04/1727100.html
總結
以上是生活随笔為你收集整理的(转)挺好的一篇介绍字节序的文章的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 递归下降语法分析程序
- 下一篇: 意识到自己的无知这就是进步