簡體   English   中英

如何用python對二進制文件進行異或

[英]how to xor binary with python

我正在嘗試像這樣使用 python 對 2 個二進制文件進行異或處理,但我的輸出不是二進制文件有什么幫助嗎?

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)

要根據 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)

干杯

由於您嘗試對相同長度的二進制文件執行 XOR,因此以下內容應該可以正常工作:

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

您可以完全避免格式化。

由於您從字符串開始並想要一個字符串結果,您可能會發現這很有趣,但它僅在它們的長度相同時才有效。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM