我必须读出uint32_t变量的字节,并且我已经从我的一位同事那里看到了这种 实现。我的问题是,如果该代码示例的行为在“几乎所有”32位微控制器上是可靠的。是否可以在每个32位微控制器上工作,还是我所依赖的平台特定行为? P.S .:本例中不考虑系统的字节顺序。在嵌入式系统上投射指针,通过指针投射在32位变量上的字节指针
uint8_t byte0=0;
uint8_t byte1=0;
uint8_t byte2=0;
uint8_t byte3=0;
uint8_t *byte_pointer; //byte_pointer
uint32_t *bridge_pointer;//pointer_bridge between 32bit and 8 bit variable
uint32_t var=0x00010203;
bridge_pointer=&var; //bridge_pointer point to var
byte_pointer=(uint8_t *)(bridge_pointer); //let the byte_pointer point to bridge_pointer
byte0=*(byte_pointer+0); //saves byte 0
byte1=*(byte_pointer+1); //saves byte 1
byte2=*(byte_pointer+2); //saves byte 2
byte3=*(byte_pointer+3); //saves byte 3
由于提前
'byte0 = byte_pointer [0]'等会更优雅(相当于'*(byte_pointer + 0)')。另外我不认为'bridge_pointer'是绝对必要的,您可以立即将'&var'强制转换为'uint8_t *'。 – Kninnug 2014-09-23 12:10:27
您可能想了解[别名](http://en.wikipedia.org/wiki/Aliasing_%28computing%29)和[指针别名](http://en.wikipedia.org/wiki/Pointer_aliasing)。 – 2014-09-23 12:11:25