2013-10-16 11 views
10

Próbuję xor 2 plików binarnych przy użyciu Pythona, ale moje dane wyjściowe nie są w binarne jakiejkolwiek pomocy?jak xorować binarnie z pytonem

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

drukowania w formacie binarnym, to powinno działać – karthikr

Odpowiedz

16
a = "11011111101100110110011001011101000" 
b = "11001011101100111000011100001100001" 
y = int(a,2)^int(b,2) 
print '{0:b}'.format(y) 
+0

To nie daje mi odpowiedź z tej samej długości –

+0

oczywiście, że nie. Odpowiedź nie ma tej samej długości. –

+0

Jeśli chcesz, aby odpowiedź była drukowana o tej samej długości, spróbuj: 'print '{0: 0 {1} b}'. Format (y, len (a))' –

-2

Ponieważ zaczynają ze strun i chcą wynik ciąg, można znaleźć to interesujące, ale to działa tylko wtedy, gdy są one tej samej długości.

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

Jeśli mogą być różnej długości można zrobić:

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 
4

Aby uzyskać binarny Xor'd do takiej samej długości, jak na zamówienie PO, wykonaj następujące czynności:

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

[output: 00010100000000001110000101010001001] 

Konwertuj ciągi binarne na liczbę całkowitą 2, następnie XOR, następnie bin(), a następnie pomiń pierwsze dwa znaki, 0b, a więc bin(y0)[2:].
Po tym, tylko zfill do długości - len(a), dla tego przypadku.

Cheers