2013-10-16 5 views
10

Ich versuche, Xor 2 Binärdateien mit Python wie folgt, aber meine Ausgabe ist nicht in Binär Hilfe?wie Xor binär mit Python

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

Druck im Binärformat, sollte es – karthikr

Antwort

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

arbeiten Es gib mir nicht die Antwort mit der gleichen Länge –

+0

Natürlich nicht. Die Antwort hat nicht die gleiche Länge. –

+0

Wenn Sie die Antwort mit der gleichen Länge drucken möchten, versuchen Sie: 'print '{0: 0 {1} b}'. Format (y, len (a))' –

-2

Da ein String Ergebnis mit Streichern und wollen beginnen, können Sie diese interessant finden, aber es funktioniert nur, wenn sie die gleiche Länge haben.

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

Wenn sie unterschiedlich lang sein könnte, können Sie tun:

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

die XOR-verknüpft binär auf die gleiche Länge zu erhalten, wie pro Antrag des OP, gehen Sie wie folgt vor:

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

[output: 00010100000000001110000101010001001] 

Konvertieren Sie die binären Zeichenfolgen in eine Ganzzahl-Basis 2, dann XOR, dann bin() und überspringen Sie dann die ersten beiden Zeichen, 0b, daher die bin(y0)[2:].
Danach, nur zfill auf die Länge - len(a), für diesen Fall.

Prost