計算機都是以八位乙個位元組為儲存單位,那麼乙個16位的整數,也就是c語言中的short,在記憶體中可能有兩種儲存順序big-endian和litte-endian.考慮乙個short整數0xaf32(0x32是低位,0xaf是高位),把它賦值給乙個short變數,那麼它在記憶體中的儲存可能有如下兩種情況:
大端位元組(big-endian):較高的有效位元組存放在較低的儲存器位址,較低的有效位元組存放在較高的儲存器位址。
| 0x2000 | 0x2001 |
| 0xaf | 0x32 |
小端位元組(big-endian):字資料的
高位元組儲存在
高位址中,而字資料的
低位元組則存放
在低位址中。
| 0x2000 | 0x2001 |
| 0x32 | 0xaf |
判斷計算機的儲存方式:
/********大端返回0;小端返回0*******/
int checkcpu()
c ; c.x = 1;
return (c.y==1))
}
大小端轉換:
#includetypedef unsigned int uint_32 ;
typedef unsigned short uint_16 ;
#define bswap_16(x) \
(uint_16)((((uint_16)(x) & 0x00ff) << 8) | \
(((uint_16)(x) & 0xff00) >> 8) \
)#define bswap_32(x) \
(uint_32)((((uint_32)(x) & 0xff000000) >> 24) | \
(((uint_32)(x) & 0x00ff0000) >> 8) | \
(((uint_32)(x) & 0x0000ff00) << 8) | \
(((uint_32)(x) & 0x000000ff) << 24) \
)uint_16 bswap_16(uint_16 x)
uint_32 bswap_32(uint_32 x)
int main(int argc,char *argv)
linux程式設計函式:
#include struct st;
union u;
int main(void)
延伸閱讀: 判斷大端小端模式
試題1 請寫乙個 c函式,若處理器是 big endian 的,則返回 0 若是 little endian 的,則返回1 解答 int checkcpu c c.a 1 return c.b 1 剖析 嵌入式系統開發者應該對 little endian 和big endian 模式非常了解。採用 ...
大端模式與小端模式判斷
在大端模式下,資料的msb存放在低位址 在小端模式下,資料的lsb 存放在低位址。一 大端與小端 msb與lsb 在嵌入式開發中,大端 big endian 和小端 little endian 是乙個很重要的概念。假如現有一32位int型數0x12345678,那麼其msb most signifi...
判斷大端小端
大端模式 big endian 和小端模式 little endian 在我們傳送資料的時候,我們首先要確定是大端還是小端模式來進行的,在接收方接收的資料必須知道資料是大端還是小端模式,才能正確地讀取和儲存資料起來,否則就會出錯。有些時候cpu公司用大端 c51微控制器 有些cpu用小端 arm 我...