it-swarm.com.de

Binär zu String/Text in Python

Ich habe oft online gesucht und konnte keinen Weg finden, um meine binäre Stringvariable zu konvertieren.X

X = "1000100100010110001101000001101010110011001010100"

in einen UTF-8-Stringwert.

Ich habe festgestellt, dass einige Leute Methoden wie verwenden

b'message'.decode('utf-8')

diese Methode hat jedoch für mich nicht funktioniert, da gesagt wird, dass 'b' nicht vorhanden ist, und ich bin nicht sicher, wie die 'Nachricht' durch eine Variable ersetzt wird. Nicht nur, aber ich konnte nicht verstehen, wie diese Methode funktioniert. Gibt es eine bessere Alternative?

Wie kann ich also eine binäre Zeichenfolge in eine Zeichenfolge umwandeln?

BEARBEITEN: Ich habe auch nichts gegen die Dekodierung von ASCII

Erklärung: Hier ist genau das, was ich gerne machen würde.

def binaryToText(z):
    # Some code to convert binary to text
    return (something here);
X="0110100001101001"
print binaryToText(X)

Dies würde dann die Zeichenfolge ergeben ...

hi

Danke, Daniel

5
Dan

Es scheint, als würden Sie versuchen, ASCII -Zeichen aus einer Binärdarstellung (Bitfolge) jedes Zeichens zu dekodieren.

Sie können jeden Block mit acht Zeichen (ein Byte) verwenden, diesen in eine Ganzzahl konvertieren und diesen dann mit chr() in ein Zeichen konvertieren:

>>> X = "0110100001101001"
>>> print(chr(int(X[:8], 2)))
h
>>> print(chr(int(X[8:], 2)))
i

Angenommen, die in der Zeichenfolge codierten Werte sind ASCII, so erhalten Sie die Zeichen. Sie können es so verallgemeinern:

def decode_binary_string(s):
    return ''.join(chr(int(s[i*8:i*8+8],2)) for i in range(len(s)//8))

>>> decode_binary_string(X)
hi

Wenn Sie die ursprüngliche Kodierung beibehalten möchten, müssen Sie nicht weiter dekodieren. Normalerweise würden Sie den eingehenden String in einen Python Unicode String umwandeln. Dies kann wie folgt geschehen (Python 2):

def decode_binary_string(s, encoding='UTF-8'):
    byte_string = ''.join(chr(int(s[i*8:i*8+8],2)) for i in range(len(s)//8))
    return byte_string.decode(encoding)
2
mhawke

Geben Sie das optionale Basisargument an int zum Konvertieren an:

>> x = "1000100100010110001101000001101010110011001010100"
>> int(x, 2)
301456912901716
1
souldeux

So konvertieren Sie als "01" -String (binäre Ziffern) angegebene Bits in den entsprechenden Text in Python 3:

>>> bits = "0110100001101001"
>>> n = int(bits, 2)
>>> n.to_bytes((n.bit_length() + 7) // 8, 'big').decode()
'hi'

Informationen zur Python-2/3-Lösung finden Sie unter Konvertierung der Binärdatei in ASCII und umgekehrt .

1
jfs

In Python 2 ist eine ASCII-codierte (Byte) Zeichenfolge auch eine Utf8-kodierte (Byte) Zeichenfolge . In Python 3 muss eine (Unicode) Zeichenfolge codiert in utf8-codierte Bytes sein. Das Dekodierungsbeispiel verlief falsch.

>>> X = "1000100100010110001101000001101010110011001010100"
>>> X.encode()
b'1000100100010110001101000001101010110011001010100'

Zeichenfolgen, die nur die Ziffern '0' und '1' enthalten, sind ein Sonderfall und es gelten die gleichen Regeln.

1
Terry Jan Reedy