C での 16 進数文字列の符号付き整数への変換
16 進数文字列から符号付き整数への変換は、プログラミングにおける一般的なタスクです。 C では、この変換を効率的に行うためにさまざまな方法を使用できます。
1 つの方法には、std::stringstream を使用することが含まれます。このアプローチにより、16 進文字列をストリームとして解析し、バイナリ形式で表される符号なし整数に変換できます。正と負の符号付き整数を処理するには、static_cast を使用して結果を符号付き型に明示的にキャストできます。
unsigned int x; std::stringstream ss; ss << std::hex << "fffefffe"; ss >> x; std::cout << static_cast<int>(x) << std::endl; // Output: -65538
新しい C 11 標準では、" 文字列を数値に使用できます。 「これを合理化するための std::stoul のような 変換関数」 process:
std::string s = "0xfffefffe"; unsigned int x = std::stoul(s, nullptr, 16); std::cout << x << std::endl; // Output: 4294967022
注: 上記の解決策では、入力された 16 進文字列が 16 進数であることを示す「0x」プレフィックスを付けてフォーマットする必要があります。
別の方法Boost ライブラリ の使用が含まれます。 Boost は、16 進数から整数への変換をシームレスに処理する boost::lexical_cast のようなユーティリティを提供します。
try { unsigned int x = boost::lexical_cast<unsigned int>("0xdeadbeef"); } catch (boost::bad_lexical_cast &) { // Handle error scenario }
エラー チェックのない軽量バージョンの lexical_cast の場合、次のようなものを実装できます。
template<typename T2, typename T1> inline T2 lexical_cast(const T1& in) { T2 out; std::stringstream ss; ss << in; ss >> out; return out; }
この関数を使用すると、「0x」を含まない 16 進数の文字列を変換できます。 prefix:
unsigned int x = lexical_cast<unsigned int>("deadbeef");
これらのメソッドを理解すると、さまざまなユースケースで 16 進文字列を C の符号付き整数に効率的に変換でき、正確で信頼性の高いデータ変換が保証されます。
以上がC で 16 進文字列を符号付き整数に効率的に変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。