如何使用python实现二进制异或

如何使用python实现二进制异或,python,binary,xor,Python,Binary,Xor,我试图像这样使用python对2个二进制文件进行xor,但我的输出不是二进制的 有什么帮助吗 a = "11011111101100110110011001011101000" b = "11001011101100111000011100001100001" y = int(a) ^ int(b) print y 由于您是从字符串开始的,并且希望得到一个字符串结果,因此您可能会发现这很有趣,但只有当它们的长度相同时,它才起作用 y = ''.join('0' if i == j else '

我试图像这样使用python对2个二进制文件进行xor,但我的输出不是二进制的 有什么帮助吗

a = "11011111101100110110011001011101000"
b = "11001011101100111000011100001100001"
y = int(a) ^ int(b)
print y

由于您是从字符串开始的,并且希望得到一个字符串结果,因此您可能会发现这很有趣,但只有当它们的长度相同时,它才起作用

y = ''.join('0' if i == j else '1' for i, j in zip(a,b))
如果长度可能不同,您可以:

y = ''.join('0' if i == j else '1' for i, j in zip(a[::-1],b[::-1])[::-1])
y = a[len(y):] + b[len(y):] + y

要根据OP的请求将Xor'd二进制文件的长度设置为相同,请执行以下操作:

a = "11011111101100110110011001011101000"
b = "11001011101100111000011100001100001"
y = int(a, 2)^int(b,2)
print bin(y)[2:].zfill(len(a))

[output: 00010100000000001110000101010001001]
将二进制字符串转换为以2为基数的整数,然后是
XOR
,然后是
bin()
,然后跳过前两个字符
0b
,从而得到
bin(y0)[2:]

在此之后,对于这种情况,只需将
zfill
调整到长度-
len(a)


干杯

既然您试图在相同长度的二进制文件上执行XOR,那么以下操作应该可以正常工作:

c=[str(int(a[i])^int(b[i])) for i in range(len(a))]
c=''.join(c)

你可以完全避免格式化。

以二进制格式打印,应该可以。如果不给我相同长度的答案,请尝试:
打印“{0:0{1}b}”。格式(y,len(a))
现在它开始工作了,因为xor表应该是这样的:a=1和b=1输出=0 a=0和b=0输出=0 a=0和b=1输出=1 a=1和b=0输出=1请考虑使用兼容python 3的版本更新它,因为python 2.x基本上不再受支持。
c=[str(int(a[i])^int(b[i])) for i in range(len(a))]
c=''.join(c)