数値の 16 進数文字列表現を 32 ビット符号付き整数に変換するタスクを考えてみましょう。たとえば、16 進文字列「ffffffe」はバイナリで 11111111111111101111111111111110 に変換され、符号付き整数 -65538 を表します。さらに、「0000000A」(2 進数: 00000000000000000000000000001010、10 進数: 10) など、正と負の両方の数値を処理する必要があります。
std::stringstream クラスを使用すると、変換プロセスが簡単になります。
unsigned int x; std::stringstream ss; ss << std::hex << "fffefffe"; ss >> x;
ストリームから整数を抽出することで、16 進文字列の 32 ビット符号付き整数表現が得られます。
Boost の lexical_cast: エラーの処理(廃止)
注: ソースの回答に示されているように、Boost の lexical_cast アプローチは、新しい C 11 関数を優先して廃止されました。
Boost は、以下を組み込んだ便利なソリューションも提供します。エラーチェック:
try { unsigned int x = lexical_cast<int>("0x0badc0de"); } catch(bad_lexical_cast &) { // Handle conversion error }
カスタム lexical_cast: シンプルエラーチェックなしの実装
Boost を使用しない場合は、エラー処理なしで 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; } unsigned int x = lexical_cast<unsigned int>("0xdeadbeef");
いずれかの std を使用する::stringstream または新しい C 11 ユーティリティ ( std::stol) を使用すると、開発者は C で 16 進文字列を符号付き整数に効率的に変換できます。
以上がC で 16 進数文字列を符号付き整数に変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。