如何使用python实现二进制异或
我试图像这样使用python对2个二进制文件进行xor,但我的输出不是二进制的 有什么帮助吗如何使用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 '
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)