Bootstrap

c语言结构体大小端转换,数组到结构体转换和联合体与位段结合中的大小端问题...

移植驱动代码时发现工程中使用了如下形式的代码

typedef struct BlkTestTag{

uint16_t

m_u1Var1;

uint8_t     reserve[2];

uint32_t

m_u4Var2;

}BlkTest;

uint8_t test_array[8] =

{0x01,0x02,0x00,0x00,0x05,0x06,0x07,0x08};

pblkTest = (BlkTest *)test_array;

u2Var1 = pblkTest->m_u1Var1;

u4Var2 = pblkTest->m_u4Var2;

本意是为了将结构体的值以数组常量形式给出。

让var1 = 0x0201;  var2 =

0x08070605

再将这些代码移植到另一款MCU时发现工作不正常。之后发现移植的这款MCU是大端的,而我们之前的使用的MCU都是小端的。于是定位上上面的数组赋值代码。

在小端MCU下会按我们想要的结果来赋值,如下图。Var1和var2的结果是我们想要的。

572728567d8542cfdc59789bf5b98ee3.png

但是如果再大端MCU上执行的话结果就大不一样。

;