2013-03-13 11 views
0

作爲標題提示,本質上我通過聯合將char數組轉換爲unsigned long int(或者更確切地說,讀爲unsigned long int)。使用聯合來讀取char數組作爲無符號long int

union { 
    char buffer[8]; 
    unsigned long int buffer_ui; 
} char_array_ui; 

我把8個字符讀入char數組,然後再把這8個字符的值作爲unsigned long int返回。 (對於那些好奇的人,這是因爲我正在從/ dev/urandom中讀取字符)。 這是安全的嗎?我的計劃中是否有可能存在的任何問題?

回答

1

兩件事情需要注意的:

  • 這是正確的只要unsigned long的大小爲8個字節 - 也許就不會那麼每個平臺上。
  • Endianness可能會在各種平臺上有所不同,從而產生不同的結果。如果您讀取的數據是unsigned long,它會自動處理以產生正確的結果,但如果您在字節後讀取它,那麼順序就是您存儲字節的方式。
+0

如果是C++ 11,'long long int'保證爲64位,所以在這種情況下,你需要'unsigned long long int'。 – 2013-03-13 22:17:08

+0

@TimothyShields我認爲這個問題是從'unsigned long long'編輯爲'unsigned long',所以我也改變了答案。無論如何,'long long int'具有**最小** 64位大小。 – SomeWittyUsername 2013-03-13 22:23:39

+0

謝謝 - 但請,你可以清楚地看到我沒有編輯我的問題! – JessMcintosh 2013-03-13 22:47:31

相關問題