ホームページ >バックエンド開発 >C++ >C で 16 進数文字列を符号付き整数に変換するにはどうすればよいですか?

C で 16 進数文字列を符号付き整数に変換するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-21 06:36:14421ブラウズ

How to Convert Hex Strings to Signed Integers in C  ?

C での 16 進数文字列から符号付き整数への変換

数値の 16 進数文字列表現を 32 ビット符号付き整数に変換するタスクを考えてみましょう。たとえば、16 進文字列「ffffffe」はバイナリで 11111111111111101111111111111110 に変換され、符号付き整数 -65538 を表します。さらに、「0000000A」(2 進数: 00000000000000000000000000001010、10 進数: 10) など、正と負の両方の数値を処理する必要があります。

解決策: std::stringstream を利用する

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 &amp;) {
    // Handle conversion error
}

カスタム lexical_cast: シンプルエラーチェックなしの実装

Boost を使用しない場合は、エラー処理なしで lexical_cast の簡易バージョンを使用できます。

template<typename T2, typename T1>
inline T2 lexical_cast(const T1 &amp;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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。