ホームページ > バックエンド開発 > C++ > C で文字列を 16 進数に、またはその逆に効率的に変換するにはどうすればよいですか?

C で文字列を 16 進数に、またはその逆に効率的に変換するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-12-18 18:23:11
オリジナル
638 人が閲覧しました

How to Efficiently Convert Strings to Hexadecimal and Vice Versa in C  ?

C での文字列の 16 進数への変換、およびその逆の変換

文字列から 16 進数への変換、およびその逆の変換は、多くのプログラミング シナリオで一般的なタスクです。 C では、この変換を効率的に実行するためのアプローチがいくつかあります。

文字列から 16 進数への変換

文字列を 16 進表現に変換するには、ループとビット単位の演算。文字列内の各文字について、その ASCII 値を抽出し、ビットシフト手法 (右シフトと左シフト) を使用して 16 進数に変換し、結果の 16 進数を出力文字列に追加できます。

これは実装例:

std::string string_to_hex(const std::string& input) {
    static const char hex_digits[] = "0123456789ABCDEF";

    std::string output;
    output.reserve(input.length() * 2);

    for (unsigned char c : input) {
        output.push_back(hex_digits[c >> 4]);
        output.push_back(hex_digits[c & 15]);
    }

    return output;
}
ログイン後にコピー

16 進数から文字列へ変換

16 進文字列をデコードして元の文字表現に戻すには、同様のループ構造を使用します。入力文字列を一度に 2 文字ずつ解析し、ルックアップ テーブルまたはビット単位の演算を使用して 16 進数の各ペアを対応する ASCII 値に変換し、デコードされた文字を出力文字列に蓄積します。

これは関数です。この変換を実行します:

std::string hex_to_string(const std::string& input) {
    const auto len = input.length();
    if (len & 1) throw std::invalid_argument("odd length");

    std::string output;
    output.reserve(len / 2);

    for (auto it = input.begin(); it != input.end(); ) {
        int hi = hex_value(*it++);
        int lo = hex_value(*it++);
        output.push_back(hi << 4 | lo);
    }

    return output;
}

int hex_value(unsigned char hex_digit) {
    static const signed char hex_values[256] = {...};
    int value = hex_values[hex_digit];
    if (value == -1) throw std::invalid_argument("invalid hex digit");
    return value;
}
ログイン後にコピー

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

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