我正在尝试将matlab函数bitxor
移植到c ++以在std :: strings上实现按位XOR运算。
现在我不确定这是否真的有效?如果我接受字符串并对单个字符执行XOR,我会观察以下内容:
c=xor(a, b); d=xor(a, c)
工作正常,即d
等于b
。00110011
,而int a=3
是按位00000011
。因此,“3”xor“2”返回一个无法显示但等于1的字符。有没有人知道 - 如果是的话 - 是否可以对字符串执行此按位异或?它用于网络编码。
答案 0 :(得分:2)
如果你想对字符串中的每个字符进行xor,只需遍历字符串并创建一个新字符:
std::string bitxor(std::string x, std::string y)
{
std::stringstream ss;
// works properly only if they have same length!
for(int i = 0; i < x.length(); i++)
{
ss << (x.at(i) ^ y.at(i));
}
return ss.str();
}
int main()
{
std::string a = "123";
std::string b = "324";
std::string c = bitxor(a, b);
std::string d = bitxor(c, b);
std::cout << a << "==" << d << std::endl; // Prints 123 == 123
return 0;
}