如果我明白你在做什麼,那麼是的,你可以通過鑄造到uint16_t
來訪問這兩個字節,但是你會遇到問題(或者字節順序問題),以及字節存儲在內存中的順序以及違反嚴格走樣。這可能會返回一個你沒有懷疑的答案。例如:
#include <stdio.h>
#include <stdint.h>
int main (void) {
uint8_t array[] = {1,2,3,4};
uint8_t *p = array + 2;
printf ("\n the uint8_t answer : %hhd\n", *p);
printf (" the uint16_t answer : %hd\n\n", *(uint16_t *)p);
printf ("**note: the will cast result in bytes 4, 3"
" (or (4 << 8 | 3) = 1027)\n\n");
return 0;
}
輸出
$ ./bin/cast_array
the uint8_t answer : 3
the uint16_t answer : 1027
**note: the cast will result in bytes 4, 3 (or (4 << 8 | 3) = 1027)
的字節被存儲在存儲器中在我的系統中little endian
順序。因此,當您投射到uint16_t
時,它期望找到least significant
,most significant
字節。在上面的示例中,在內存中使用34
時,演員會將實際訂單解釋爲43
,導致值爲1027
而不是(3 << 8) | 4 = 772
。
正如指出的那樣,你將通過轉換成比char
結果不確定的行爲以外的任何違反有關嚴格別名哪裏型修剪規則。所有這些行爲的結果都依賴於硬件和編譯器,除了學習練習之外,不應該用於其他任何事情。
請給出完整的代碼(數組聲明,所用變量的類型,...)。 –
您應該使用更高的警告級別編譯並收聽編譯器警告。 –
在你的代碼中'dummyAddress'不是一個指針 –