与无符号字符异或

Xor with unsigned char

我正在尝试在 64 位密钥和 64 位无符号字符数组之间执行 Xor,但我不断收到非常奇怪的输出。数据类型或操作顺序有问题吗?

#include <iostream>

using namespace std;

int main() {
    unsigned char inputText = '7';
    unsigned char key = 'a';

    cout << "(input: 0x";
    cout << " " << inputText << ") ^ (";

    cout << "key: 0x";
    cout << " " << key << ") = ";

    cout << "0x ";
    cout << (inputText ^ key);
    cout << endl;
    return 0;
}

这是输出:

(input: 0x 7) ^ (key: 0x a) = 0x 86

如您所见,xor 生成大整数,但没有证据表明十六进制值已被异或。 xor 的正确输出应该是:

0x d

你不是在对十六进制数字进行异或运算,而是对字符进行 ascii values 运算。

输入:“7”、“3”、“6”、“5”

ascii: 55, 51, 54, 53

key: '0', 'f', 'f', 'a'

ascii: 48, 102, 102, 97

结果:55^48、51^102、54^102、53^97

结果:7、85、80、84