简体   繁体   中英

how to xor binary with python

I'm trying to xor 2 binaries using python like this but my output is not in binary any help?

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)

To get the Xor'd binary to the same length, as per the OP's request, do the following:

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

[output: 00010100000000001110000101010001001]

Convert the binary strings to an integer base 2, then XOR , then bin() and then skip the first two characters, 0b , hence the bin(y0)[2:] .
After that, just zfill to the length - len(a) , for this case.

Cheers

Since you are trying to carryout XOR on the same length binaries, the following should work just fine:

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

You can avoid the formatting altogether.

Since you are starting with strings and want a string result, you may find this interesting but it only works if they are the same length.

y = ''.join('0' if i == j else '1' for i, j in zip(a,b))

If they might be different lengths you can do:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM