大端小端模式判斷以及資料轉換

2021-06-08 08:41:57 字數 1436 閱讀 7748

計算機都是以八位乙個位元組為儲存單位,那麼乙個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 我...