2014-10-11 20 views
0

我有一個打印出int輸入的二進制數的函數。使用Stringstream的C++ Hex到Int

當我有一個字符串形式十六進制,我稱之爲使用功能:

int num = 0; 
    stringstream << "0xabcd123"; 
    stringstream >> num; //num becomes the decimal representation of the above hex. 
    outputBinary(num); 

完美的作品。

然而,

int num = 0; 
    stringstream << "0xabcd1234"; //fully filled hex value. 
    stringstream >> num; //num remains at 0. 
    outputBinary(num); 

難道是一個完全充滿十六進制值的原因字符串流溢出從十六進制字符串爲「民」轉換時?

+0

你的兩段代碼是相同的(你可能需要顯示'outputBinary',兩個) – quantdev 2014-10-11 02:54:31

+0

嘗試過'unsigned num; stringstream >> num;'? – 2014-10-11 03:04:34

回答

3

該值超出範圍。根據標準,該字符串使用strtoll進行解析...該值確實適合於long long,並且被解釋爲正數。然後檢查它是否適合所提供的類型(int)。但是,不,它不能,假設你的編譯器有32位int

寫作

int num = 0xabcd1234; 
在源代碼

會,很麻煩也因爲文字會被給定類型unsigned int和隱式轉換signed int超出範圍,導致實現定義的行爲。