操作符>>能否同时读取十六进制和十进制的整数?

6

我能说服C++中的operator>>同时读取hex值和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;
}
3个回答

12

你需要告诉C++你的进制是多少。

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

is >> std::hex >> result;

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


12

使用std::setbase(0)可以实现前缀依赖解析,它能够将10(十进制)解析为十进制的10,0x10(十六进制)解析为十进制的16,以及010(八进制)解析为十进制的8。

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

-2

0x是C/C++特有的前缀。一个十六进制数就像一个十进制数一样只包含数字。你需要检查这些字符的存在并适当地解析。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接