如何在python中反转二进制文件

时间:2017-09-13 00:53:38

标签: python python-3.x binary

所以我想知道是否有二进制字符串,例如:

01001000 01100101 01101100 01101100 01101111 00100000 01001101 01101111 01101101 00100001 

(你好妈妈!)
可以通过 所有 1变成{3}中的0和副verca的方式来反转。

4 个答案:

答案 0 :(得分:2)

您可以拆分二进制字符串并使用按位操作,例如:

In []:
x = '01001000 01100101 01101100 01101100 01101111 00100000 01001101 01101111 01101101 00100001'
r = [format(int(n, 2) ^ 0xff, 'b') for n in x.split()]
r

Out[]:
['10110111', '10011010', '10010011', '10010011', '10010000',
 '11011111', '10110010', '10010000', '10010010', '11011110']

这很简单,可以加入这个:

In []:
' '.join(r)

Out[]:
'10110111 10011010 10010011 10010011 10010000 11011111 10110010 10010000 10010010 11011110'

答案 1 :(得分:2)

您可以使用与生成器的连接,并将'1'替换为'0',反之亦然,同时保持任何两个字符(示例中的空格)不变:

string = "01001000 01100101 01101100 01101100 01101111 00100000 01001101 01101111 01101101 00100001"
reverse = ''.join('0' if c=='1' else ('1' if c=='0' else c) for c in string)
print(reverse)

输出:

10110111 10011010 10010011 10010011 10010000 11011111 10110010 10010000 10010010 11011110

如@AChampion评论,您可以使用以下方法缩短和改进上述代码:

string = "01001000 01100101 01101100 01101100 01101111 00100000 01001101 01101111 01101101 00100001"
reverse = ''.join('10'[int(c)] if c in '01' else c for c in string)
print(reverse)

答案 2 :(得分:2)

str.translate()对此非常有用且高效:

bits = '01001000 01100101 01101100 01101100 01101111 00100000 01001101 01101111 01101101 00100001'

table = {ord('0'): '1', ord('1'): '0'}    # '0' -> '1', '1' -> '0'
inverted_bits = bits.translate(table)
print(inverted_bits)

输出:

10110111 10011010 10010011 10010011 10010000 11011111 10110010 10010000 10010010 11011110

如果您想应用其他转换,这也很方便。例如,也可以使用此转换表删除空格:

table = {ord('0'): '1', ord('1'): '0', ord(' '): None}
print(bits.translate(table))

输出:

10110111100110101001001110010011100100001101111110110010100100001001001011011110

另外,使用str.maketrans()创建转换表:

>>> table = str.maketrans('01', '10')
>>> print(bits.translate(table))
10110111 10011010 10010011 10010011 10010000 11011111 10110010 10010000 10010010 11011110

>>> print(bits.translate(str.maketrans('01', '10', ' ')))
10110111100110101001001110010011100100001101111110110010100100001001001011011110

答案 3 :(得分:1)

a="01001000 01100101 01101100 01101100 01101111 00100000 01001101 01101111 01101101 00100001"
a=a.replace('0','a').replace('1','0').replace('a','1')

您可以使用替换功能。

输出:

'10110111 10011010 10010011 10010011 10010000 11011111 10110010 10010000 10010010 11011110'