Python-int in Binär-string?
Gibt es Konserven in Python-Methoden zum konvertieren von einem Integer (oder Long) in einen Binär-string in Python?
Gibt es eine Vielzahl von dec2bin () - Funktionen auf Google... Aber ich hatte gehofft, ich könnte mit einem built-in-Funktion /Bibliothek.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Python string-format-Methode können eine format-Spezifikation.
Format spec docs für Python 2
Format spec docs für Python 3
str.format()
nur formatieren Wert ist overkill. Gehen Sie direkt zurformat()
Funktion:format(n, 'b')
. Es gibt keine Notwendigkeit, analysieren die Platzhalter und passen Sie es zu einem argument, fahren Sie geradeaus für die werteformatierung operation selbst. Verwenden Sie nurstr.format()
wenn Sie benötigen, um das formatierte Ergebnis in einer längeren Zeichenfolge (z.B. als Vorlage verwenden).0
an der Formatierung string:format(10, '016b')
Formate zu 16 Ziffern mit führenden Nullen.0
im"{0:b}"
gelöscht werden können, Nein? Ich meine, in dem Fall, wo nur eine Zahl formatiert wird, ist es richtig zu stellen"{:b}"
, ist es nicht?"{:08b}".format(37)
Wenn Sie auf der Suche für
bin()
als äquivalent zuhex()
es wurde in python 2.6.Beispiel:
str(bin(i))[2:]
(0.369 s für 1000000ops) als"{0:b}".format(i)
(0.721 s für 1000000ops)format(i, 'b')
statt. Berücksichtigen Sie, dass gibt Ihnen auch padding und alignment-Optionen obwohl;format(i, '016b')
format, um eine 16-bit-null-gepolsterte binäre Zahl. Tun das gleiche mitbin()
würden Sie haben, um einestr.zfill()
nennen:bin(i)[2:].zfill(16)
(keine Notwendigkeit zu nennenstr()
!).format()
's die Lesbarkeit und Flexibilität (dynamische Formatierung ist viel schwieriger, mitbin()
) sind gute Kompromisse, nicht optimiert für Leistung, es sei denn, Sie haben, bis Sie dann optimieren für Wartbarkeit.f"{37:b}"
.Python eigentlich hat haben so etwas bereits eingebaut, für diese, die Fähigkeit, Operationen wie
'{0:b}'.format(42)
, die Ihnen die bit-Muster (in einer Zeichenfolge) für42
oder101010
.Für eine Allgemeine Philosophie, keine Sprache oder Bibliothek, wird seinen Kundenstamm alles, die Sie wünschen. Wenn Sie arbeiten in einer Umgebung, die nicht genau, was Sie brauchen, Sie sollten das sammeln von code-snippets, wie Sie entwickeln, um sicherzustellen, dass Sie nie haben zu schreiben, die gleiche Sache zweimal. Wie zum Beispiel:
wird erstellen Sie Ihre Binär-string, basierend auf dem dezimalen Wert, vorausgesetzt, Python hat nicht schon der einfachere Weg.
Die Allgemeine Idee ist, code aus (in der Reihenfolge der Präferenz):
Als Referenz:
Diese Funktion kann konvertieren eine positive ganze Zahl ist so groß wie
18446744073709551615
, dargestellt als Zeichenfolge'1111111111111111111111111111111111111111111111111111111111111111'
.Kann es geändert werden, um zu dienen, die eines viel größeren integer, wenn es vielleicht nicht so praktisch wie
"{0:b}".format()
oderbin()
.Wenn Sie möchten, eine textliche Darstellung ohne 0b-prefix haben, können Sie damit:
Wenn Sie möchten, eine n-bit-Darstellung:
Alternativ, wenn Sie lieber eine Funktion:
format(integer, 'b')
.bin()
ist ein debugging-tool, die speziell auf die Herstellung der Python-Binär-integer-literal-syntaxformat()
gemeint ist, zu produzieren, die spezifischen Formate.bin()
ist ein debugging-tool richtet sich an die Herstellung der Python-Binär-integer-literal-syntax? Ich konnte nicht finden, dass in der Dokumentation.oct()
undhex()
.str.zfill()
könnten Siestr.format()
oderformat()
mit einem dynamischen zweiten argument:'{0:0{1}b}'.format(x, n)
oderformat(b, '0{}b'.format(n))
.zfill
ist einfacher zu Lesen und zu verstehen als die dynamische zweite argument, so werde ich halten, dass.one-liner mit lambda:
test:
BEARBEITEN:
aber dann 🙁
im Vergleich zu
''
mit'0'
, aber es wird eine führende 0 für eine beliebige Anzahl.Einen einfachen Weg, das zu tun, ist die Verwendung von string-format finden Sie in diesem Seite.
Und wenn Sie wollen, haben eine Feste Länge des Binär-string, können Sie mit diesem:
Wenn zwei der Ergänzung erforderlich ist, kann die folgende Zeile verwendet werden:
wobei n die Breite des Binär-string.
Zusammenfassung von alternativen:
Contributors include John Fouhy, Tung Nguyen, mVChr, Martin Thoma. und Martijn Pieters.
str.format()
nur formatieren Wert ist overkill. Fahren Sie geradeaus auf dieformat()
Funktion:format(n, 'b')
. Keine Notwendigkeit zu analysieren, die Platzhalter und passen Sie es zu einem argument, dass Art und Weise.Dies ist für python 3 und hält die führenden Nullen !
Mithilfe von numpy pack/unpackbits, Sie sind Ihre besten Freunde.
uint8
array in eine binäre geschätzte Ausgabe-array. Also gut für die Werte bis 255.Es sei denn, ich bin Missverständnis, was meinst du Binär-string ich denke, das Modul, das Sie suchen, ist struct
Noch eine andere Lösung mit einem anderen Algorithmus, durch bitweise Operatoren.
Einer schnelleren version ohne die Umkehrung der Zeichenfolge.
Ausgabe:
Hier ist der code habe ich gerade umgesetzt. Dies ist nicht eine Methode aber Sie können es als ein ready-to-use-Funktion!
hier ist die einfache Lösung mit der divmod() Funktion gibt die Erinnerung und das Ergebnis der division ohne die Fraktion.
dectobin(10)
führte zu '0101'Rechner mit allen notwendigen Funktionen für DEC,BIN,HEX:
(hergestellt und getestet mit Python 3.5)
Können Sie ändern Sie die Eingabe von test-Nummern und die konvertierten lieben.
Für diejenigen von uns, die Sie brauchen, um zu konvertieren Ganzzahlen mit Vorzeichen (Bereich -2**(digits-1) 2**(digits-1)-1) 2-Komplement Binär-strings, das funktioniert:
Diese produziert:
Etwas ähnliche Lösung
Hier ist noch eine weitere Möglichkeit, mit regulären Mathe, keine loops, nur die Rekursion. (Trivialen Fall 0 nichts zurückgibt).
Als die vorhergehenden Antworten meist verwendete format(),
hier ist ein f-string Umsetzung.
Ausgabe:
Für die Bequemlichkeit ist hier das python-docs link für formatierte string-Literale: https://docs.python.org/3/reference/lexical_analysis.html#f-strings.
Wenn Sie bereit sind, aufzugeben "reinem" Python, aber gewinnen eine Menge Feuerkraft, es gibt Salbei - Beispiel hier:
Werden Sie feststellen, dass es liefert als string, also als eine Zahl, die Sie wollen, um zu tun, so etwas wie
Ich eine Methode gefunden, mit matrix-operation zu konvertieren dezimal zu Binär.
E
ist input-decimal-DatenM
ist die binäre Bestellungen.bindata
ist die Ausgabe von binären Daten, die in einem format von 1 von M binären matrix.können Sie so machen :
oder :
numpy.binary_repr(num, width=None)
Beispiele aus der Dokumentation link oben:
Entlang einer ähnlichen Linie zu Yusuf Yazici Antwort
Ich es angepasst, so dass die einzige variable mutiert, ist das Ergebnis (und n natürlich).
Wenn Sie brauchen, um diese Funktion zu verwenden, die anderswo (d.h., die Folge wird von einem anderen Modul), empfiehlt sich die folgende Anpassung:
Also -1 werden Ihre sentinel-Wert Angabe der Konvertierung fehlgeschlagen. (Dies wird vorausgesetzt, Sie konvertieren NUR die positiven zahlen, egal ob Integer oder Long).
Hier ist ein einfaches Binär-zu-dezimal-Konverter, die ständig Schleifen
Dies ist meine Antwort, es funktioniert gut..!
Fühle ich mich Pieter Martijn Kommentar verdient, hervorgehoben zu werden, als Antwort:
Mir ist ist klar und vielseitig.