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.

44voto

kctong529 Punkte 818

Als Referenz:

def toBinary(n):
    return ''.join(str(1 & int(n) >> i) for i in range(64)[::-1])

Diese Funktion kann eine positive ganze Zahl bis zur Größe von 18446744073709551615 , dargestellt als String '1111111111111111111111111111111111111111111111111111111111111111' .

Es kann so modifiziert werden, dass es für eine viel größere Zahl von Menschen geeignet ist, auch wenn es nicht so praktisch ist wie "{0:b}".format() o bin() .

39voto

grepit Punkte 18534

Dies ist für Python 3 und es behält die führenden Nullen!

print(format(0, '08b'))

enter image description here

30voto

Xiang Punkte 401

Ein einfacher Weg, dies zu tun, ist die Verwendung des String-Formats, siehe dies Seite .

>> "{0:b}".format(10)
'1010'

Und wenn Sie eine feste Länge der binären Zeichenfolge haben wollen, können Sie dies verwenden:

>> "{0:{fill}8b}".format(10, fill='0')
'00001010'

Wenn das Zweierkomplement erforderlich ist, kann die folgende Zeile verwendet werden:

'{0:{fill}{width}b}'.format((x + 2**n) % 2**n, fill='0', width=n)

wobei n die Breite der binären Zeichenfolge ist.

17voto

John Forbes Punkte 1118

Da die vorangegangenen Antworten meist format() verwendet haben, ist hier eine f-string-Implementierung.

integer = 7
bit_count = 5
print(f'{integer:0{bit_count}b}')

Ausgabe:

00111

Der Einfachheit halber ist hier der Link zu den Python-Dokumenten für formatierte String-Literale: https://docs.python.org/3/reference/lexical_analysis.html#f-strings .

17voto

Aziz Alto Punkte 16611

Einzeiler mit lambda :

>>> binary = lambda n: '' if n==0 else binary(n/2) + str(n%2)

Test:

>>> binary(5)
'101'

EDITAR :

aber dann :(

t1 = time()
for i in range(1000000):
     binary(i)
t2 = time()
print(t2 - t1)
# 6.57236599922

im Vergleich zu

t1 = time()
for i in range(1000000):
    '{0:b}'.format(i)
t2 = time()
print(t2 - t1)
# 0.68017411232

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