如何用python异或二进制

Posted

技术标签:

【中文标题】如何用python异或二进制【英文标题】:how to xor binary with python 【发布时间】:2013-10-25 04:44:42 【问题描述】:

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

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

【问题讨论】:

以二进制格式打印,它应该可以工作 【参考方案1】:
a = "11011111101100110110011001011101000"
b = "11001011101100111000011100001100001"
y = int(a,2) ^ int(b,2)
print '0:b'.format(y)

【讨论】:

它没有给我相同长度的答案 如果您希望答案以相同的长度打印,请尝试:print '0:01b'.format(y,len(a)) 现在它正在工作,因为 xor 表应该是这样的 a = 1 and b = 1 output= 0 a = 0 and b = 0 output= 0 a = 0 and b = 1输出 = 1 a = 1 和 b = 0 输出 = 1 请考虑用兼容的 python 3 版本更新它,因为大多数情况下不再支持 python 2.x。【参考方案2】:

按照 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)

干杯

【讨论】:

【参考方案3】:

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

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

您可以完全避免格式化。

【讨论】:

【参考方案4】:

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

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

【讨论】:

以上是关于如何用python异或二进制的主要内容,如果未能解决你的问题,请参考以下文章

python如何用format进行进制转换与如何删除进制前缀

如何用python把二进制数转换为十进制数?

如何用Python将十进制数字转为二进制,以及将二进制转为十六进制?

如何用qbytearray读取二进制文件

Python列表,长度为7。如何用零和一填充数据

如何用十进制创建熊猫系列?