2014-10-11 90 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超出范围,导致实现定义的行为。