如何用python实现二进制异或

2024-05-13 02:04:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我正尝试使用类似于python的xor 2二进制文件,但我的输出不是二进制的 有什么帮助吗?

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

Tags: 文件二进制intprintxor
3条回答
a = "11011111101100110110011001011101000"
b = "11001011101100111000011100001100001"
y = int(a,2) ^ int(b,2)
print '{0:b}'.format(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),对于这个例子。

干杯

相关问题 更多 >