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'并将其替换为另一个二进制数字?
答案 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()])