我必須讀出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