在 C 中将字符串转换为十六进制,反之亦然
将字符串转换为十六进制,反之亦然是许多编程场景中的常见任务。在 C 中,有多种方法可以有效地完成此转换。
字符串到十六进制转换
要将字符串转换为其十六进制表示形式,我们可以使用循环和按位运算。对于字符串中的每个字符,我们可以提取其 ASCII 值,使用位移技术(右移和左移)将其转换为十六进制,并将生成的十六进制数字附加到输出字符串。
这是一个示例实现:
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; }
十六进制转字符串转换
为了将十六进制字符串解码回其原始字符表示形式,我们采用类似的循环结构。我们一次解析输入字符串两个字符,使用查找表或按位运算将每对十六进制数字转换为其相应的 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 中有效地将字符串转换为十六进制,反之亦然?的详细内容。更多信息请关注PHP中文网其他相关文章!