817 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.

1076voto

Tung Nguyen Punkte 11827

Die String-Format-Methode von Python kann eine Format-Spezifikation annehmen.

>>> "{0:b}".format(37)
'100101'

Formatierungsspezifische Dokumente für Python 2

Formatierungsspezifische Dokumente für Python 3

658voto

John Fouhy Punkte 39035

Wenn Sie auf der Suche nach bin() als Äquivalent zu hex() wurde es in Python 2.6 hinzugefügt.

Ejemplo:

>>> bin(10)
'0b1010'

72voto

paxdiablo Punkte 809679

Python tatsächlich tut haben dafür bereits etwas eingebaut, nämlich die Möglichkeit, Operationen durchzuführen wie '{0:b}'.format(42) die Ihnen das Bitmuster (in einer Zeichenkette) für 42 , oder 101010 .


Für eine allgemeinere Philosophie gilt, dass keine Sprache oder Bibliothek ihrer Benutzerbasis 何事も die sie sich wünschen. Wenn Sie in einer Umgebung arbeiten, die nicht genau das bietet, was Sie brauchen, sollten Sie während der Entwicklung Codeschnipsel sammeln, um sicherzustellen, dass Sie nie das Gleiche zweimal schreiben müssen. Wie zum Beispiel der Pseudocode:

define intToBinString, receiving intVal:
    if intVal is equal to zero:
        return "0"
    set strVal to ""
    while intVal is greater than zero:
        if intVal is odd:
            prefix "1" to strVal
        else:
            prefix "0" to strVal
        divide intVal by two, rounding down
    return strVal

die Ihre binäre Zeichenkette auf der Grundlage des Dezimalwerts konstruieren wird. Denken Sie daran, dass dies ein allgemeiner Pseudocode ist, der nicht unbedingt die Die meisten effiziente Art und Weise zu tun, aber mit den Iterationen, die Sie vorzuschlagen scheinen, wird es keinen großen Unterschied machen. Es ist wirklich nur als Leitfaden gedacht, wie es gemacht werden könnte.

Die allgemeine Idee ist die Verwendung von Code aus (in der Reihenfolge der Präferenz):

  • die Sprache oder integrierte Bibliotheken.
  • Bibliotheken von Drittanbietern mit geeigneten Lizenzen.
  • Ihre eigene Sammlung.
  • etwas Neues, das Sie schreiben müssen (und in Ihrer eigenen Sammlung für später speichern).

63voto

Martin Thoma Punkte 105621

Wenn Sie eine textuelle Darstellung ohne den 0b-Präfix wünschen, können Sie dies verwenden:

get_bin = lambda x: format(x, 'b')

print(get_bin(3))
>>> '11'

print(get_bin(-3))
>>> '-11'

Wenn Sie eine n-Bit-Darstellung wünschen:

get_bin = lambda x, n: format(x, 'b').zfill(n)
>>> get_bin(12, 32)
'00000000000000000000000000001100'
>>> get_bin(-12, 32)
'-00000000000000000000000000001100'

Alternativ können Sie auch eine Funktion haben:

def get_bin(x, n=0):
    """
    Get the binary representation of x.

    Parameters
    ----------
    x : int
    n : int
        Minimum number of digits. If x needs less digits in binary, the rest
        is filled with zeros.

    Returns
    -------
    str
    """
    return format(x, 'b').zfill(n)

62voto

Roman Pavelka Punkte 2637

Ich bin überrascht, dass es keine Erwähnung eines netten Weg, um dies zu erreichen mit Formatierung Zeichenfolgen, die in Python 3.6 und höher unterstützt werden. TLDR:

>>> number = 1
>>> f'0b{number:08b}'
'0b00000001'

Längere Geschichte

Dies ist eine Funktion zur Formatierung von Zeichenketten, die ab Python 3.6 verfügbar ist:

>>> x, y, z = 1, 2, 3
>>> f'{x} {y} {2*z}'
'1 2 6'

Sie können auch binäre Daten anfordern:

>>> f'{z:b}'
'11'

Geben Sie die Breite an:

>>> f'{z:8b}'
'      11'

Null-Polsterung anfordern:

f'{z:08b}'
'00000011'

Und fügen Sie ein gemeinsames Präfix hinzu, um die Binärzahl zu kennzeichnen:

>>> f'0b{z:08b}'
'0b00000011'

Sie können auch Python das Präfix für Sie hinzufügen lassen, aber ich mag es nicht so sehr wie die obige Version, weil Sie das Präfix in der Breite berücksichtigen müssen:

>>> f'{z:#010b}'
'0b00000011'

Weitere Informationen finden Sie in der offiziellen Dokumentation unter Formatierte String-Literale y Format-Spezifikation Mini-Sprache .

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