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

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

Susan Sarandon
Susan Sarandonオリジナル
2024-12-28 13:03:12508ブラウズ

How Can I Convert a Hex String to a Signed Integer in C  ?

C で 16 進文字列を符号付き整数に変換する

多くの状況で、C で 16 進文字列を符号付き整数に変換する必要があります。たとえば、バイナリ値 11111111111111101111111111111110 を表す「ffffffe」のような 16 進文字列があり、これは符号付き整数 -65538 に対応します。

std::stringstream

この変換を実現する 1 つのアプローチには、std::stringstream:

unsigned int x;   
std::stringstream ss;
ss << std::hex << "fffefffe";
ss >> x;

非負の数値

負でない数値を処理するには、次のコマンドを使用できます。例:

#include <sstream>
#include <iostream>

int main() {
    unsigned int x;   
    std::stringstream ss;
    ss << std::hex << "0000000A";
    ss >> x;
    std::cout << static_cast<int>(x) << std::endl;
}
これは結果として 10 を生成します。これは 16 進文字列 "0000000A" としては正しいものです。

C 11 文字列から数値への関数

C 11 では、次のような文字列を数値に変換する関数を利用できます。 std::stoul:

std::string s = "0xfffefffe";
unsigned int x = std::stoul(s, nullptr, 16);

その他のアプローチ

あるいは、lexical_cast:

< のような関数を提供する Boost などのライブラリを利用することもできます。 🎜>
unsigned int x = boost::lexical_cast<int>("0x0badc0de");
自分でロールするlexical_cast

依存関係のない、より単純なアプローチを希望する場合は、lexical_cast のカスタム実装を使用できます:

以上がC で 16 進数文字列を符号付き整数に変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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