838 Stimmen

Python int zu binärem String?

Gibt es irgendwelche festen Python-Methoden, um einen Integer (oder Long) in eine binäre Zeichenfolge in Python zu konvertieren?

Es gibt eine Unzahl von dec2bin() Funktionen auf Google... Aber ich hatte gehofft, ich könnte eine integrierte Funktion / Bibliothek verwenden.

12voto

Bob Stein Punkte 14259

Zusammenfassung der Alternativen:

n=42
assert  "-101010" == format(-n, 'b')
assert  "-101010" == "{0:b}".format(-n)
assert  "-101010" == (lambda x: x >= 0 and str(bin(x))[2:] or "-" + str(bin(x))[3:])(-n)
assert "0b101010" == bin(n)
assert   "101010" == bin(n)[2:]   # But this won't work for negative numbers.

Zu den Mitwirkenden gehören John Fouhy , Tung Nguyen , mVChr , Martin Thoma . und Martijn Pieters.

11voto

Sandu Ursu Punkte 1041
>>> format(123, 'b')
'1111011'

10voto

DeanM Punkte 4329

Für diejenigen unter uns, die vorzeichenbehaftete ganze Zahlen (Bereich -2**(Ziffern-1) bis 2**(Ziffern-1)-1) in binäre Zeichenketten im 2er-Komplement konvertieren müssen, funktioniert dies:

def int2bin(integer, digits):
    if integer >= 0:
        return bin(integer)[2:].zfill(digits)
    else:
        return bin(2**digits + integer)[2:]

Dies ergibt:

>>> int2bin(10, 8)
'00001010'
>>> int2bin(-10, 8)
'11110110'
>>> int2bin(-128, 8)
'10000000'
>>> int2bin(127, 8)
'01111111'

8voto

Skiller Dz Punkte 849

Kann man so machen:

bin(10)[2:]

oder :

f = str(bin(10))
c = []
c.append("".join(map(int, f[2:])))
print c

7voto

Dolf Andringa Punkte 1863

Die akzeptierte Antwort ging nicht auf negative Zahlen ein, worauf ich eingehen werde. Zusätzlich zu den obigen Antworten können Sie auch einfach die bin y hex Funktionen. Und in umgekehrter Richtung verwenden Sie die binäre Notation:

>>> bin(37)
'0b100101'
>>> 0b100101
37

Bei negativen Zahlen wird die Sache allerdings etwas komplizierter. In der Frage wird nicht angegeben, wie Sie mit negativen Zahlen umgehen wollen.

Python fügt einfach ein negatives Vorzeichen hinzu, so dass das Ergebnis für -37 so aussehen würde:

>>> bin(-37)
'-0b100101'

In binären Computer-/Hardware-Daten gibt es keine negativen Vorzeichen. Alles, was wir haben, sind 1en und 0en. Wenn Sie also binäre Datenströme lesen oder erzeugen, die von anderer Software/Hardware verarbeitet werden sollen, müssen Sie zunächst die verwendete Notation kennen.

Eine Notation lautet Vorzeichen-Magnituden-Schreibweise wobei das erste Bit das negative Vorzeichen darstellt und der Rest der tatsächliche Wert ist. In diesem Fall wäre -37 0b1100101 und 37 wäre 0b0100101 . Dies sieht aus wie das, was Python erzeugt, aber fügen Sie einfach eine 0 oder 1 vor für positive / negative Zahlen.

Häufiger ist Zweierkomplement-Notation was komplizierter zu sein scheint und das Ergebnis unterscheidet sich stark von der String-Formatierung in Python. Sie können die Details in dem Link lesen, aber mit einem 8bit signed integer wäre -37 0b11011011 und 37 wäre 0b00100101 .

Python hat keine einfache Möglichkeit, diese binären Darstellungen zu erzeugen. Sie können verwenden numpy um Binärwerte im Zweierkomplement in Python-Ganzzahlen umzuwandeln:

>>> import numpy as np
>>> np.int8(0b11011011)
-37
>>> np.uint8(0b11011011)
219
>>> np.uint8(0b00100101)
37
>>> np.int8(0b00100101)
37

Aber ich weiß nicht, eine einfache Möglichkeit, das Gegenteil mit eingebauten Funktionen zu tun. Die Bitstring-Paket kann jedoch helfen.

>>> from bitstring import BitArray
>>> arr = BitArray(int=-37, length=8)
>>> arr.uint
219
>>> arr.int
-37
>>> arr.bin
'11011011'
>>> BitArray(bin='11011011').int
-37
>>> BitArray(bin='11011011').uint
219

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X