2017-07-20 5 views
0

Ich möchte einige Eingabe-ASCII-Zeichen in Bytes konvertieren. Wie von 'a' zu 01100001.
Ich habe Antworten wie this gelesen. Aber manchmal gibt es 0b10000110 wie 9-stellige Werte aus. Ich bin mir nicht sicher, ob das ein Fehler ist oder wie es funktionieren soll. Ich habe so etwas wie dies gemacht:Python ASCII-Zeichen in Bytes konvertieren

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) 

es ziemlich gut mit normalen Zeichen gearbeitet. Aber wenn ich seltsame Zeichen eingegeben wie: ‚B
Es gibt sehr seltsam:

001110 
00100111 
0010000000 
01000010 

ich sehr bin nicht mit Python erfahren, so dass ich weiß nicht, ob es einen Weg gibt, dass Sie eine Funktion schreiben oder andere Methoden, um dies zu tun.
Ich verwende Python 3.6
Vielen Dank

+0

Sie wollen nicht * Bytes *, Sie wollen eine * binäre Darstellung *. Eine Zeichenfolge bestehend aus nur 0 und 1 Zeichen. So wie "42" keine Integerzahl ist, ist es eine String-Repräsentation der Zahl. –

+0

binäre Darstellung ist was ich meine. Danke – Mike

+0

'format (ord (Zeichen), '08b')' würde eine 8-stellige Binärdarstellung erzeugen. –

Antwort

3

Die Einsicht, die Sie suchen, ist:

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

UPDATE

Wie von Martijn Pieters vorgeschlagen, ist die eingebaute format Funktion weit überlegen :

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

UPDATE 2

Nur festgestellt, dass diese Frage als Duplikat markiert wurde. Pieters gab die Formatantwort here und erklärt, wie es im Detail funktioniert.

+2

Verwenden Sie 'str.format()' nicht, wo Sie die ['format()' Funktion] (https://docs.python.org/3/library/functions.html#format) verwenden können. Warum den Parsing-Overhead hinzufügen? 'format (121, '08b')' erzeugt die gleiche Ausgabe, ohne dass Python den Platzhalter finden und die Formatierungsanweisung herausziehen muss. Sie haben nur einen * Platzhalter und keinen anderen Text in dieser Vorlagenzeichenfolge. –

+0

Woher wusste ich nicht über diese eingebaute Funktion? Ich dachte, ich kenne sie alle. Wow, danke! –

Verwandte Themen