【发布时间】:2021-05-23 01:10:54
【问题描述】:
我正在尝试在 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'd。 xor 的正确输出应该是:
0x d
【问题讨论】:
-
次要,但
K变量的意义何在?你可以消除它,只使用w。 -
它是更大的加密算法的一部分,其中变量具有重要意义
-
为了可读性我把它拿出来
-
这并没有解决问题,但不要将变量的值与屏幕上该值的表示混淆。您所追求的只是对两个变量中的 values 进行异或操作。 “十六进制值”是它们(有时)向世界展示的方式。编译器不在乎它们输入的是十六进制、八进制、文本还是其他任何内容。
-
是的,这对我来说确实是个问题,因为我更好地理解了解决方案。谢谢皮特贝克尔
标签: c++ arrays char xor unsigned