根據多位元組資料在儲存單元中的位元組擺放順序的不同,分為大端模式和小端模式。
msb和lsb即最高有效位和最低有效位,是單位位元組中每一位的排列順序。在大端模式中,從左到右:msb......lsb(符合正常的書寫習慣),小端:lsb......msb。
在大小端模式不同的裝置之間進行資料通訊時,要注意進行端模式的轉換。
不同端模式的硬體在多位元組資料儲存的過程是相同的即按照位元組接收的先後順序由低位址向高位址依次存放,也就是說先收到的資料放置在低位址,後接收到的資料放置在高位址,資料傳送時,也按照位址由低到高的順序取資料傳送。在此基礎上,我們分析端模式轉換的必要性:假設在資料採集接收中,ad晶元負責採集資料,為大端模式,dsp晶元負責接收ad資料,為小端模式,二者互動乙個32位資料0x11 22 33 44時,ad晶元以大端模式儲存該資料,因此在ad中該資料的儲存按照高位元組放低位址,低位元組放高位址的順序:
低位址 11
位址+1 22
位址+1 33
高位址 44,
低位址 11
位址+1 22
位址+1 33
高位址 44,
乍一看,資料收發前後並沒有變化,但是看似相同的位元組擺放順序在不同端模式的裝置中的解讀方式是完全不同的。大端模式的ad晶元中,該資料邏輯上表示為0x11223344,但是在小端模式的dsp中,該資料被理解為:0x44332211,這種解讀方式的不同是由於端模式中,資料匯流排的msb和lsb的順序不同:大端模式為
(msb)0...........................31(lsb)
小端模式:
(lsb)0...........................31(msb)
大小端問題
對於位數大於 8位的處理器,例如 16位或者 32位的處理器,由於暫存器寬度大於乙個位元組,那麼必然存在著乙個如果將多個位元組安排的問題。因此就導致了大端儲存模式和小端儲存模式。例如乙個 16bit 的short型x 在記憶體中的位址為 0x0010,x 的值為0x1122 那麼0x11 為高位元組...
大小端問題
大小端問題 跨位元組位域大小端轉換例項講解 注 結構體整體當做u16 u32來賦值時才會產生這種問題,如果是按位元組或者移位方式訪問則沒有問題 typedef struct s bit sample 測試程式 vos void bigendiandomainfiledtest vos void 1 ...
大小端問題
大小端問題 最近工作中,有兩次遇到大小端問題,所以花時間寫這篇日誌,總結一下。1.實際需求 1 前段時間寫了乙個修復損壞的gzip檔案的tool,在linux server上編譯執行沒有問題。但是在solaris server上運編譯執行,結果總是和預期的不一致,跟蹤發現是由大小端問題導致的 2 最...