运算符>>可以读取整数十六进制和十进制吗?

时间:2020-03-05 18:57:14  来源:igfitidea点击:

我可以说服C ++中的operator >>读取十六进制值AND和十进制值吗?以下程序演示了如何读取十六进制错误。我希望同一个istringstream能够读取十六进制和十进制。

#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;
}

解决方案

回答

我们需要告诉C ++基础是什么。

要解析一个十六进制数字吗?将"是>>结果"行更改为:

is >> std::hex >> result;

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

回答

使用std :: setbase(0)启用依赖前缀的解析。它将能够将" 10"(十进制)解析为十进制十进制," 0x10"(十六进制)解析为十六进制十进制,而将" 010"(八进制)解析为八进制十进制。

#include <iomanip>
is >> std::setbase(0) >> result;

回答

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