簡単なテスト プログラムがあります (エラー チェックは削除されています)。
#include <iostream>
#include <iomanip>
#include <sstream>
#include <string>
int main() {
std::string line;
while(std::cin >> line) {
int value;
std::stringstream stream(line);
stream >> std::setbase(0) >> value;
std::cout << "You typed: " << value << std::endl;
}
}
これは、プレフィックスに依存する整数の解析に最適です。"0x"
または"0X"
で始まる文字列を 16 進数で、文字列で始まる文字列を 8 進数で解析します'0'
。これは、私が使用して見たいくつかのリソースで説明されています。私が見つけることができなかったのは、これが機能することが保証されていることを C++ 標準で示していることです。
C 標準のセクション 7.20.1.4.3 にstrtol
は、(6.4.4.1 は整数定数の構文です) と書かれています。
base の値が 0 の場合、サブジェクト シーケンスの期待される形式は、6.4.4.1 で説明されている整数定数の形式であり、オプションでプラス記号またはマイナス記号が前に付いていますが、整数の接尾辞は含まれていません。
これは、私が試したいくつかのバージョンの GCC で動作しますが、一般的に安全に使用できますか?