使用Stringstream将C ++ Hex转换为Int

时间:2014-10-11 02:48:26

标签: c++ binary hex stringstream

我有一个打印出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);

当从十六进制字符串转换为&#34; num&#34;?

时,完全填充的十六进制值是否会导致字符串流溢出

1 个答案:

答案 0 :(得分:3)

该值超出范围。根据标准,使用strtoll解析字符串...该值适合long long并被解释为正数。然后它检查它是否适合所提供的类型(int)。但不,它不能,假设你的编译器有32位int

书写

int num = 0xabcd1234;
源代码中的

也会出现问题,因为文字将被赋予类型unsigned int,并且对signed int的隐式转换超出范围,导致实现定义的行为。