xor在c ++中以字符串形式存储的两个十六进制值

san*_*_bl 5 c++ xor

我有两个十六进制值,存储为字符串:

string md5OfPath("a77e0a3e517e0a9d44c3a823d96ca83c");
string guidValue("c3b491e559ac4f6a81e527e971b903ed");
Run Code Online (Sandbox Code Playgroud)

我想对C++中的两个值执行XOR运算.你能告诉我如何执行xor操作吗?

Ker*_* SB 5

我认为直接循环应该可以解决问题:

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

std::string str_xor(std::string const & s1, std::string const & s2)
{
    assert(s1.length() == s2.length());

    static char const alphabet[] = "0123456789abcdef";

    std::string result;
    result.reserve(s1.length());

    for (std::size_t i = 0; i != s1.length(); ++i)
    { 
        unsigned int v = value(s1[i]) ^ value(s2[i]);

        assert(v < sizeof alphabet);

        result.push_back(alphabet[v]);
    }

    return result;
}
Run Code Online (Sandbox Code Playgroud)