如何在字符串的二进制表示形式中用0或1替换'b'

时间:2018-10-03 09:55:04

标签: python binary

import binascii
a = []
a = input('enter the messge')
def str2bin(message):
    binary = bin(int(binascii.hexlify(message.encode("ascii")), 16))
    return binary[1:]

print(str2bin(a))

输入字符串:hai

输出:b11010000110000101101001

如何从输出中删除或替换'b'并将其替换为另一个二进制数字?

2 个答案:

答案 0 :(得分:1)

Python字符串创建后无法更改,它们是不可变的。您将必须创建一个新字符串,将数字和原始字符串的子字符串组合在一起,如下所示:

data = str2bin(a)
data0 = "0" + data[1:]
data1 = "1" + data[1:]

[1:]切片。在这种情况下,它将复制字符串,并删除第一个字符(索引为0)。

答案 1 :(得分:0)

bin函数不适用于此任务。它不仅会给您不必要的“ b”,而且还会删除前导零,因此编码后的位串的长度会有所不同,从而使其难以正确解码。相反,您可以使用format函数或方法,并指定位长,以免丢失前导零。

在Python 3中,不需要binascii.hexlify,我们可以直接从bytes对象获取必需的整数。下面的代码确保每个字节的位串均具有8位,必要时在左侧填充零。它使用默认的UTF-8编码,但是您可以根据需要将其更改为“ ascii”。如果输入字符串是纯ASCII,则两种编码都将得到相同的结果,但是'utf8'处理任何Unicode。当然,对于ASCII范围之外的字符,单个字符将被编码为2个或更多字节。

s = 'hai'
bits = ''.join([format(u, '08b') for u in s.encode()])
print(bits)

输出

011010000110000101101001

如果您拥有Python 3.6+,则可以使用更紧凑(更快)的f字符串语法来做到这一点:

bits = ''.join([f'{u:08b}' for u in s.encode()])