Gibt es vordefinierte Python-Methoden, um eine Ganzzahl (oder Long) in Python in eine Binärzeichenfolge zu konvertieren?
Es gibt eine Vielzahl von dec2bin () -Funktionen bei Google ... Aber ich hatte gehofft, ich könnte eine integrierte Funktion / Bibliothek verwenden.
Antworten:
Die String-Formatmethode von Python kann eine Formatspezifikation annehmen.
Formatieren Sie die Spezifikationsdokumente für Python 2
Formatieren Sie die Spezifikationsdokumente für Python 3
quelle
str.format()
Nur einen Wert zu formatieren, ist übertrieben. Gehen Sie direkt zurformat()
Funktion :format(n, 'b')
. Es ist nicht erforderlich, den Platzhalter zu analysieren und ihn einem Argument zuzuordnen. Führen Sie direkt die Wertformatierungsoperation selbst aus. Nur verwenden,str.format()
wenn Sie das formatierte Ergebnis in eine längere Zeichenfolge einfügen müssen (z. B. als Vorlage verwenden).0
Wert zur Formatierungszeichenfolge hinzu:format(10, '016b')
Formate mit 16 Stellen und führenden Nullen.0
In"{0:b}"
nicht fallen gelassen werden? Ich meine, wenn nur eine Zahl formatiert wird, ist es richtig zu sagen"{:b}"
, nicht wahr?"{:08b}".format(37)
Wenn Sie nach
bin()
einem Äquivalent suchenhex()
, wurde es in Python 2.6 hinzugefügt.Beispiel:
quelle
str(bin(i))[2:]
(0,369s für 1000000ops) als"{0:b}".format(i)
(0,721s für 1000000ops)str.format()
ist sowieso das falsche Tool, das Sieformat(i, 'b')
stattdessen verwenden würden. Berücksichtigen Sie, dass Sie dadurch auch Optionen zum Auffüllen und Ausrichten erhalten.format(i, '016b')
Formatieren auf eine 16-Bit-Null-aufgefüllte Binärzahl. Um dasselbe mit zu tun, müsstenbin()
Sie einenstr.zfill()
Anruf hinzufügen :bin(i)[2:].zfill(16)
(kein Anruf erforderlichstr()
!).format()
Die Lesbarkeit und Flexibilität (dynamische Formatierung ist viel schwierigerbin()
) sind große Kompromisse. Optimieren Sie die Leistung nicht, es sei denn, Sie müssen, bis dahin optimieren Sie die Wartbarkeit.f"{37:b}"
.Python tatsächlich tut etwas dafür gebaut hat bereits die Fähigkeit , Operationen, wie zu tun
'{0:b}'.format(42)
, was Ihnen das Bitmuster geben (in einem String) für42
oder101010
.Für eine allgemeinere Philosophie gibt keine Sprache oder Bibliothek ihrer Benutzerbasis alles , was sie sich wünschen. Wenn Sie in einer Umgebung arbeiten, die nicht genau das bietet, was Sie benötigen, sollten Sie während der Entwicklung Codeausschnitte sammeln, um sicherzustellen, dass Sie nie zweimal dasselbe schreiben müssen. Wie zum Beispiel der Pseudocode:
Dadurch wird Ihre Binärzeichenfolge basierend auf dem Dezimalwert erstellt. Denken Sie daran , dass ein generisch bisschen Pseudo-Code ist das nicht das sein kann , am meisten jedoch effiziente Art und Weise tun, mit den Iterationen Sie scheinen zu schlagen, wird es nicht viel Unterschied machen. Es ist wirklich nur als Richtlinie gedacht, wie es gemacht werden könnte.
Die allgemeine Idee ist, Code von (in der Reihenfolge der Präferenz) zu verwenden:
quelle
s = "1" + s
unds = "0" + s
Zeilen. Jeder macht eine unnötige Kopie von s. Sie sollten die Zeichenfolge umkehren, bevor Sie sie zurückgeben.'{0:b}'.format(42)
, die langsame Methode war einfach ein Beispiel dafür, wie man es generisch macht, was abhängig von der tatsächlich verwendeten Sprache O (n ^ 2) sein kann oder nicht. Es sieht nur nach Python aus, da Python eine ideale Pseudocodesprache ist, also werde ich das ändern, um es klar zu machen.s = "1" + s
der nicht O (N) ist, wenns
es sich um einen Zeichenfolgentyp handelt. Vielleicht eine Sprache, in der alle Zeichenfolgen rückwärts gespeichert sind oder jedes Zeichen ein Knoten in einer verknüpften Liste ist? Für jede typische Sprache ist eine Zeichenfolge im Grunde ein Array von Zeichen. In diesem Fall muss für das Präfixieren einer Zeichenfolge eine Kopie erstellt werden. Wie können Sie das Zeichen sonst vor die anderen Zeichen stellen?Wenn Sie eine Textdarstellung ohne das Präfix 0b wünschen, können Sie Folgendes verwenden:
Wenn Sie eine n-Bit-Darstellung wünschen:
Alternativ, wenn Sie eine Funktion bevorzugen:
quelle
format(integer, 'b')
.bin()
ist ein Fehlersuchwerkzeug, das speziell darauf ausgerichtet auf die Herstellung Python binary integer Literalsyntax ,format()
zu produzieren spezifische Formate gemeint ist.bin()
ein Debugging-Tool ist, mit dem die Python-Binär-Ganzzahl-Literal-Syntax erstellt werden soll? Ich konnte das in der Dokumentation nicht finden.oct()
undhex()
.str.zfill()
Sie nutzen könntenstr.format()
oderformat()
mit einem dynamischen zweiten Argumente:'{0:0{1}b}'.format(x, n)
oderformat(b, '0{}b'.format(n))
.zfill
leichter zu lesen und zu verstehen ist als das dynamische zweite Argument, also werde ich das behalten.Als Referenz:
Diese Funktion kann eine positive Ganzzahl konvertieren, die so groß wie
18446744073709551615
ist und als Zeichenfolge dargestellt wird'1111111111111111111111111111111111111111111111111111111111111111'
.Es kann geändert werden, um eine viel größere Ganzzahl zu liefern, obwohl es möglicherweise nicht so praktisch ist wie
"{0:b}".format()
oderbin()
.quelle
Eine einfache Möglichkeit hierfür ist die Verwendung des Zeichenfolgenformats (siehe diese Seite) .
Und wenn Sie eine feste Länge der Binärzeichenfolge haben möchten, können Sie Folgendes verwenden:
Wenn das Zweierkomplement erforderlich ist, kann die folgende Zeile verwendet werden:
Dabei ist n die Breite der Binärzeichenfolge.
quelle
Dies ist für Python 3 und es behält die führenden Nullen!
quelle
Einzeiler mit Lambda :
Prüfung:
BEARBEITEN :
aber dann :(
im Vergleich zu
quelle
''
mit'0'
, aber es wird eine führende 0 für eine beliebige Zahl hinzufügen.Zusammenfassung der Alternativen:
Zu den Mitwirkenden gehören John Fouhy , Tung Nguyen , mVChr und Martin Thoma . und Martijn Pieters.
quelle
str.format()
Nur einen Wert zu formatieren, ist übertrieben. Gehen Sie direkt zurformat()
Funktion :format(n, 'b')
. Sie müssen den Platzhalter nicht analysieren und auf diese Weise einem Argument zuordnen.Da die vorhergehenden Antworten meistens format () verwendeten, ist hier eine F-String-Implementierung.
Ausgabe:
Der Einfachheit halber finden Sie hier den Python-Dokument-Link für formatierte Zeichenfolgenliterale: https://docs.python.org/3/reference/lexical_analysis.html#f-strings .
quelle
quelle
Mit Numpy Pack / Unpackbits sind sie Ihre besten Freunde.
quelle
uint8
Arrays in ein binärwertiges Ausgabearray. So gut für Werte bis 255.Für diejenigen von uns, die vorzeichenbehaftete Ganzzahlen (Bereich -2 ** (Ziffern-1) in 2 ** (Ziffern-1) -1) in 2-Komplement-Binärzeichenfolgen konvertieren müssen, funktioniert dies:
Dies erzeugt:
quelle
Es sei denn, ich verstehe falsch, was Sie unter Binärzeichenfolge verstehen. Ich denke, das Modul, nach dem Sie suchen, ist struct
quelle
Noch eine Lösung mit einem anderen Algorithmus unter Verwendung bitweiser Operatoren.
Eine schnellere Version ohne Umkehrung der Zeichenfolge.
quelle
Ausgabe:
quelle
Sie können so tun:
oder :
quelle
Hier ist der Code, den ich gerade implementiert habe. Dies ist keine Methode, aber Sie können sie als gebrauchsfertige Funktion verwenden !
quelle
Hier ist eine einfache Lösung mit der Funktion divmod (), die die Erinnerung und das Ergebnis einer Division ohne den Bruch zurückgibt.
quelle
dectobin(10)
führte zu '0101'quelle
numpy.binary_repr(num, width=None)
Beispiele aus dem obigen Dokumentationslink:
quelle
Etwas ähnliche Lösung
quelle
Hier ist noch eine andere Möglichkeit, normale Mathematik zu verwenden, keine Schleifen, nur Rekursion. (Trivialfall 0 gibt nichts zurück).
quelle
Rechner mit allen notwendigen Funktionen für DEC, BIN, HEX: (erstellt und getestet mit Python 3.5)
Sie können die eingegebenen Testnummern ändern und die konvertierten erhalten.
quelle
quelle
Wenn Sie bereit sind, "reines" Python aufzugeben, aber viel Feuerkraft zu gewinnen, gibt es hier Sage - Beispiel :
Sie werden feststellen, dass es als Zeichenfolge zurückgegeben wird. Wenn Sie es also als Zahl verwenden möchten, möchten Sie so etwas tun
quelle
quelle
Ich habe eine Methode gefunden, die eine Matrixoperation verwendet, um Dezimalzahlen in Binärzahlen umzuwandeln.
E
ist eingegebene Dezimaldaten,M
ist die binäre Reihenfolge.bindata
Es werden Binärdaten ausgegeben, die in einem Format von 1 mal M Binärmatrix vorliegen.quelle
Hier ist ein einfacher Binär-Dezimal-Konverter, der sich kontinuierlich wiederholt
quelle
Dies ist meine Antwort, es funktioniert gut ..!
quelle
0
? Bekommenbinary(0)
Sie zB das, was Sie erwarten?