如何用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进行进制转换与如何删除进制前缀