2017-07-20 204 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

我怎麼不知道這個內建函數?我以爲我都知道他們。哇謝謝! –