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