如何在python 3中实现按位XOR

时间:2017-03-06 17:16:45

标签: python python-3.x

我想实现1000000 ^ 10100001的XOR操作。

def keygen(key):
    print (key)
    k0 = key
    w0 = k0[0:8]
    w1 = k0[8:]

    w2 = int(w1) ^ int(10000000)

但我没有得到正确的输出。我的w1为:10100001,我的二进制o.p w2为:0b100110001011110110000010

我应该得到:00100001

1 个答案:

答案 0 :(得分:1)

您需要使用0b...来表示二进制数。

使用int将字符串转换为数字时,请指定base 2(第二个可选参数)。否则,它被解释为十进制数字:

w2 = int(w1, 2) ^ 0b10000000
#            ^    ^^------------ binary (= 128 in decimal)
#            |
#            optional argument (base 2)

并且,您不需要为int致电0b10000000,因为它已经是一个int对象。

更新如果您想要获取字符串表示,请使用str.formatformat格式指定08b(0:前导零,8:at至少8位数,b:二进制)

>>> format(w2, '08b')
00100001