23

我正在尝试像这样使用 python 对 2 个二进制文件进行异或,但我的输出不是二进制文件有任何帮助吗?

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

4 回答 4

34
a = "11011111101100110110011001011101000"
b = "11001011101100111000011100001100001"
y = int(a,2) ^ int(b,2)
print '{0:b}'.format(y)
于 2013-10-16T21:20:50.720 回答
9

要使 Xor'd 二进制文件具有相同的长度,根据 OP 的请求,请执行以下操作:

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

[output: 00010100000000001110000101010001001]

将二进制字符串转换为以 2 为基数的整数,然后XORbin()然后跳过前两个字符,0b,因此bin(y0)[2:].
之后,对于这种情况,只是zfill长度 - 。len(a)

干杯

于 2017-03-19T16:21:46.437 回答
0

由于您正在尝试对相同长度的二进制文件执行 XOR,因此以下内容应该可以正常工作:

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

您可以完全避免格式化。

于 2020-11-27T17:26:08.290 回答
-2

由于您从字符串开始并想要一个字符串结果,您可能会觉得这很有趣,但只有当它们的长度相同时才有效。

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
于 2013-10-16T23:29:24.563 回答