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