2017-07-20 161 views
0

我想将一些输入的ASCII字符转换为字节。如从'a'到01100001.
我已阅读答案,如this。但有时它会发出0b10000110像9位数值。我不确定这是否是错误,或者这是否是它假设的工作方式。 我做了这样的事情:Python将ASCII字符转换为字节

text = list(input("text: ")) 

for character in text: 
    if character == ' ': 
     byt = '00000000' 
    else: 
     byt = bin(ord(character)) 
    byt = byt.replace('b', '') #delete the 'b' in the output 
    if len(byt) != 8: 
     byt = '0' + byt 
    print(byt) 

它工作得很好用普通字符。但是,当我进入奇怪的字符,如:“B
它输出很奇怪:

001110 
00100111 
0010000000 
01000010 

我不是非常有经验与Python,所以我不知道是否有,你可以写一个函数或方法其他方法来做到这一点。
我使用Python 3.6
非常感谢

+0

你不想*字节*,你想要一个*二进制表示*。一个只包含0和1个字符的字符串。 “42”不是一个整数,它是数字的字符串表示。 –

+0

二进制表示就是我的意思。谢谢 – Mike

+0

'格式(ord(character),'08b')'会产生一个8个字符的二进制表示。 –

回答

3

你正在寻找的见解是:

>>> '{:08b}'.format(121) 
'01111001' 
>>> '{:08b}'.format(7) 
'00000111' 

UPDATE

如建议通过的Martijn Pieters的,内置的format功能远远优于:

>>> format(121, '08b') 
'01111001' 
>>> format(7, '08b') 
'00000111' 

UPDATE 2

刚才意识到这个问题被标记为重复。 Pieters给出了格式答案here,并解释了它如何工作的细节。

+2

不要在'str.format()'中使用['format()'函数](https://docs.python.org/3/library/functions.html#format)。为什么添加解析开销? '格式(121,'08b')'产生相同的输出,而不必Python找到占位符并将格式指令拉出。您只有*一个*占位符,并且该模板字符串中没有其他文本。 –

+0

我怎么不知道这个内建函数?我以为我都知道他们。哇谢谢! –