6

我可以说服operator>>C++ 读取一个hex值 AND 和一个decimal值吗?下面的程序演示了读取十六进制是如何出错的。我希望istringstream能够同时阅读hexdecimal

#include <iostream>
#include <sstream>

int main(int argc, char** argv)
{
    int result = 0;
    // std::istringstream is("5"); // this works
    std::istringstream is("0x5"); // this fails

    while ( is.good() ) {
        if ( is.peek() != EOF )
            is >> result;
        else
            break;
    }

    if ( is.fail() )
        std::cout << "failed to read string" << std::endl;
    else
        std::cout << "successfully read string" << std::endl;

    std::cout << "result: " << result << std::endl;
}
4

3 回答 3

12

你需要告诉 C++ 你的基础是什么。

想要解析一个十六进制数?将“is >> result”行更改为:

is >> std::hex >> result;

放置 std::dec 表示十进制数, std::oct 表示八进制。

于 2008-09-16T21:33:45.013 回答
12

使用std::setbase(0)which 启用前缀相关解析。它将能够将10(dec)解析为十进制的 10,0x10(十六进制)解析为十进制的 16,010(八进制)解析为十进制的 8。

#include <iomanip>
is >> std::setbase(0) >> result;
于 2008-09-16T21:33:47.773 回答
-2

0x 是 C/C++ 特定的前缀。十六进制数字只是像十进制数字一样的数字。您需要检查这些字符是否存在,然后进行适当的解析。

于 2008-09-16T21:40:50.847 回答