首页 >后端开发 >C++ >如何在 C 中有效地将字符串转换为十六进制,反之亦然?

如何在 C 中有效地将字符串转换为十六进制,反之亦然?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-18 18:23:11643浏览

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

在 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn