0

std::hex と std::dec を使用すると、文字列から 16 進数を解析し、C++ で 10 進数に変換できます。しかし、16 進数が符号付きの場合はどうなるでしょうか。

たとえば、次のコードでは、入力 "F1" が符号なし 16 進数の場合は正しい 241 が返されますが、入力が符号付き 16 進数の場合、結果は -15 になります。符号付き 16 進値を処理できる C++ 関数はありますか?

 int n;
 stringstream("F1") >> std::hex >> n;
 std::cout << std::dec << "Parsing \"F1\" as hex gives " << n << '\n';
4

1 に答える 1

1

「符号付き 16 進数」と言うときは、a のビット単位の表現をchar16 進数で表すとしたら、F1になります-15。ただし、-15符号付き 16 進数は単に-F.

このビット単位の表現から取得したい場合は-15、次のようにする必要があります。

std::string szTest = "F1";
unsigned char chTest = std::stoi( szTest, nullptr, 16 );

char chTest2 = *reinterpret_cast<char*>(&chTest);

std::cout << szTest << ": " << static_cast<int>(chTest2) << std::endl;

return 0;
于 2013-06-02T09:26:17.287 に答える