【问题标题】:C++ Hex to Int using Stringstream使用 Stringstream 的 C++ Hex 到 Int
【发布时间】:2014-12-06 06:41:51
【问题描述】:

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

从十六进制字符串转换为“num”时,会不会是一个完全填充的十六进制值导致字符串流溢出?

【问题讨论】:

  • 你的两个sn-ps代码是相同的(你可能需要显示outputBinary,两个)
  • 试过unsigned num; stringstream &gt;&gt; num; ?

标签: c++ binary hex stringstream


【解决方案1】:

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

写作

int num = 0xabcd1234;

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

【讨论】:

    猜你喜欢
    • 2012-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-16
    • 2013-08-07
    相关资源
    最近更新 更多