繁体   English   中英

如何在python中反转二进制

[英]How to reverse binary in python

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

01001000 01100101 01101100 01101100 01101111 00100000 01001101 01101111 01101101 00100001 

(妈妈,你好!)
可以以相反的方式将所有 1变成0 ,反之亦然,在Python 3中。

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

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'

您可以将join与生成器一起使用,并将'1'替换为'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)

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
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'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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