我正在尝试像这样使用 python 对 2 个二进制文件进行异或,但我的输出不是二进制文件有任何帮助吗?
a = "11011111101100110110011001011101000"
b = "11001011101100111000011100001100001"
y = int(a) ^ int(b)
print y
a = "11011111101100110110011001011101000"
b = "11001011101100111000011100001100001"
y = int(a,2) ^ int(b,2)
print '{0:b}'.format(y)
要使 Xor'd 二进制文件具有相同的长度,根据 OP 的请求,请执行以下操作:
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)
您可以完全避免格式化。
由于您从字符串开始并想要一个字符串结果,您可能会觉得这很有趣,但只有当它们的长度相同时才有效。
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