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

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

Barbara Streisand
リリース: 2024-12-21 06:36:14
オリジナル
423 人が閲覧しました

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート