2017-05-04 50 views
1

我正嘗試使用以下代碼讀取十六進制值。它應該從dataFile中讀取一個值,並且該值應該是「810c0001」。讀取十六進制值在C++中給出錯誤的編號

int in; 
dataFile>>hex>>in>>dec; 
cout <<"I just wrote the value: "<<hex<<in<<dec<<endl; 

我運行該程序後,輸出結果顯示爲「我剛寫入的值:7fffffff」。 我注意到這個問題只發生在最重要的位被填充。如果我將輸入'8'更改爲'7',我會得到以下正確輸出:「我只寫了值:710c0001」我可以用正確的值讀取哪些內容? 謝謝

+1

十六進制810c0001是一個非常大的數字......你溢出你的目標類型。 –

回答

2

這是因爲int大小是4字節,這意味着它只能存儲從-2,147,483,648到2,147,483,647的值。

7FFFFFFF = 2147483647

值0x810c0001超出範圍。如果您只關心正數,您可以將變量類型更改爲unsigned int,以便能夠存儲更大的值。

+0

謝謝,我只是將它切換到一個unsigned int。 –

+0

具體而言,您應該使用最適合您輸入的類型。如果你所有的值都是這個範圍的正數,那麼'uint32_t'(或者某些系統上的'unsigned int')是正確的。但是不要隨便改變類型來隨機獲得更大的範圍。 –

+0

好的,謝謝,我只需要知道每個點的位值,所以不需要負數。 –

相關問題