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

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

Patricia Arquette
リリース: 2024-12-30 18:27:10
オリジナル
158 人が閲覧しました

How Can I Efficiently Convert Hexadecimal Strings to Signed Integers in C  ?

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

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