关于c ++字符串的bitxor

时间:2013-09-16 14:28:47

标签: c++ string matlab bit-manipulation

我正在尝试将matlab函数bitxor移植到c ++以在std :: strings上实现按位XOR运算。

现在我不确定这是否真的有效?如果我接受字符串并对单个字符执行XOR,我会观察以下内容:

  • c=xor(a, b); d=xor(a, c)工作正常,即d等于b
  • “3”是按位00110011,而int a=3是按位00000011。因此,“3”xor“2”返回一个无法显示但等于1的字符。

有没有人知道 - 如果是的话 - 是否可以对字符串执行此按位异或?它用于网络编码。

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;
}