可以运营商>>读取int十六进制和十进制?

时间:2008-09-16 21:22:34

标签: c++

我可以说服运营商>>在C ++中读取十六进制值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;
}

3 个答案:

答案 0 :(得分:12)

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

想要解析十六进制数?将“is&gt;&gt;结果”行更改为:

is >> std::hex >> result;

使用std :: dec表示十进制数,std :: oct表示八进制。

答案 1 :(得分:10)

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

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

答案 2 :(得分:-2)

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