我有一个像这样的十六进制字符的char a[]:



我想将其转换为与每个十六进制数字相对应的字母,如下所示:

68656c6c6f = hello

并将其存储在char b[]中,然后执行相反操作

我不需要代码块,我想解释一下,使用了什么库以及如何使用它。

谢谢

最佳答案

这是实现此技巧的简单代码:

unsigned int hex_digit_value(char c)
{
    if ('0' <= c && c <= '9') { return c - '0'; }
    if ('a' <= c && c <= 'f') { return c + 10 - 'a'; }
    if ('A' <= c && c <= 'F') { return c + 10 - 'A'; }
    return -1;
}

std::string dehexify(std::string const & s)
{
    std::string result(s.size() / 2);

    for (std::size_t i = 0; i != s.size(); ++i)
    {
        result[i] = hex_digit_value(s[2 * i]) * 16
                  + hex_digit_value(s[2 * i + 1]);
    }

    return result;
}

用法:
char const a[] = "12AB";

std::string s = dehexify(a);

注意:
  • 一个适当的实现将添加检查,以确保输入字符串的长度是偶数,并且每个数字实际上都是有效的十六进制数字。
  • Dehexifying与ASCII无关。它只是将任何十六进制的半字节序列转换为字节序列。我只是将std::string用作方便的“字节容器”,这就是事实。
  • SO上有很多答案,向您展示了如何走另一条路。只需搜索“hexify”。
  • 关于c++ - 将十六进制数字的char []转换为与ascii表中的十六进制数字相对应的字母的char []并将其反转,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13344134/

    10-13 08:33