6

operator>>C++ でhex値 AND と値の両方を読み取るように説得できdecimalますか? 次のプログラムは、16 進数の読み取りがどのようにうまくいかないかを示しています。と の両方を同じ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++ に伝える必要があります。

16 進数を解析したいですか。「is >> result」行を次のように変更します。

is >> std::hex >> result;

std::dec を入れると 10 進数を表し、std::oct を付けると 8 進数を表します。

于 2008-09-16T21:33:45.013 に答える
12

std::setbase(0)プレフィックス依存の解析を有効にするために使用します。10(10 進数) を 10 進数として、0x10(16 進数) を 16 進数として、 (8 進数) を 8 進数として解析でき010ます。

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

0xはC/C++固有のプレフィックスです。16進数は、10進数のような数字です。これらの文字の存在を確認してから、適切に解析する必要があります。

于 2008-09-16T21:40:50.847 に答える