XOR两个二进制字符串c ++

Sid*_*rma 2 c++ xor bitwise-xor

我有两个字符串如下:

STRING1  :        011011110011000

STRING2  :        011001000001000

EXPECTED OUTPUT : 000010110010000
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试使用以下代码对它们进行异或(按位)时,输出为空.码:

for(int i = 0; i<15; i++)
 {
    final_key[i] = STRING1[i] ^ STRING2[i]; 
    cout<<" XOR = "<<final_key[i];
 }
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激.

Ben*_*Lin 7

您正在尝试char一次XOR 2 .尝试改为:

final_key[i] = ((STRING1[i]-'0') ^ (STRING2[i]-'0')) + '0'; 
Run Code Online (Sandbox Code Playgroud)

说明

有关ASCII值,请参阅此处.

为ASCII值'0'是48,并且的ASCII值'1'是49 48 ^ 49是1,48 ^ 48并且49 ^ 49是0.这些将0或1的值返回到一个char,这将代表任一EOF字符(如果它是0)或SOH炭(如果它是一个),它们都没有正确输出.

因此,您需要char在执行XOR运算之前将每个转换为位(0或1).因此,您可以'0'从每个中减去char以获得数字的数字值,进行XOR操作,然后加回'0'以获得正确的输出

  • 我以为我会指出一个简化.由于48 ^ 49 = 1且48 ^ 48 = 49 ^ 49 = 0,因此实际上不必从每个输入字符中减去"0".只需要在结果中加上"0". (5认同)