[英]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.