2012-04-30 198 views
0

就我所知,在C編程語言中,數組按元素存儲在存儲器元素中。 (即,元素0,元素1,元素2,...,元素n)。我試圖用以下代碼看到:將無符號字符數組轉換爲整數

unsigned char a[] = { '\1' , '\2', '\3' ,'\4' }; 
printf("%d\n", (int*) a); 

由於無符號字符是1個字節,整數是4個字節;我認爲它具有打印值:

00000001 00000010 00000011 00000100 = 2^2 + 2^8 + 2^9 + 2^17 + 2^24 = 16909060

然而,當我運行這個程序,它會爲每個試驗產生不同的結果。

我在這裏錯過了什麼?

+0

在大多數計算機上,字節順序與您所假設的相反。 –

+0

相關:http://stackoverflow.com/q/29969049/694576 – alk

回答

4

你可能想要使用*(int *)a,否則你只是打印一個地址。

然而,這將調用實現定義:

  • 取決於你的平臺的endianness你會得到不同的結果。
  • 根據平臺的不同,char陣列可能無法正確對齊以讀取爲int
  • 編譯器可能會根據假設決定進行時髦的優化,您將永遠不會通過int *讀取char陣列 - 您正在破壞所謂的嚴格別名規則
+0

此外,它打印什麼取決於這個盒子上的排序。 –

+1

Re「根據字節順序,您將得到兩種不同的結果之一。」不只是兩個。周圍仍然有一些混合的末端框。例如,0x2143或0x3412。 –

+0

@大衛:公平點;措辭相應地適應! –

相關問題