Während es nicht wirklich wichtig ist, bedeutet eine Binärzeichenfolge normalerweise eine Zeichenfolge, die tatsächliche Binärdaten enthält (ein Byte enthält zwei hexadezimale Ziffern, dh "\ x00" ist ein Nullbyte).
TrevorKirkby
Antworten:
563
Sie verwenden die integrierte intFunktion und übergeben ihr die Basis der eingegebenen Nummer, dh 2für eine Binärzahl:
>>> int('11111111',2)255
Hier finden Sie eine Dokumentation für Python2 und für Python3 .
Falls jemand das Gegenteil sucht: bin(255)-> '0b11111111'. Weitere Details finden Sie in dieser Antwort .
Akseli Palén
7
Es ist zu beachten, dass dies nur für vorzeichenlose binäre Ganzzahlen funktioniert. Bei vorzeichenbehafteten Ganzzahlen sind die Konvertierungsoptionen ein Chaos.
Gefälschter Name
2
Wie geht das in Python 3?
Saras Arya
2
@ SarasArya Es ist sehr ähnlich! :) Ich habe aktualisiert, siehe oben.
Entspannen Sie
1
Beachten Sie außerdem, dass Sie in einer interaktiven REPL-Sitzung (wie von der >>>Eingabeaufforderung vorgeschlagen) überhaupt keine Verwendung benötigen print. Das hypothetische Beispiel des OP tat es nicht. Also sollte es in Python 2 und 3 wirklich identisch sein.
John Y
37
Geben Sie einfach 0b11111111 in die interaktive Python-Oberfläche ein:
Eine andere Möglichkeit, dies zu tun, ist die Verwendung des bitstringModuls:
>>>from bitstring importBitArray>>> b =BitArray(bin='11111111')>>> b.uint
255
Beachten Sie, dass sich die vorzeichenlose Ganzzahl von der vorzeichenbehafteten Ganzzahl unterscheidet:
>>> b.int
-1
Das bitstringModul ist keine Voraussetzung, verfügt jedoch über viele performante Methoden, um Eingaben in und von Bits in andere Formen umzuwandeln und diese zu bearbeiten.
Die Verwendung von int mit base ist der richtige Weg. Früher habe ich das gemacht, bevor ich herausgefunden habe, dass int auch Basis ist. Es handelt sich im Grunde genommen um eine Reduzierung, die auf ein Listenverständnis der primitiven Art der Konvertierung von Binär in Dezimal angewendet wird (z. B. 110 = 2 ** 0 * 0 + 2 ** 1 * 1 + 2 ** 2 * 1).
add =lambda x,y : x + y
reduce(add,[int(x)*2** y for x, y in zip(list(binstr), range(len(binstr)-1,-1,-1))])
Achten Sie auf 2 Informationen, die durch einen Doppelpunkt getrennt sind.
Auf diese Weise können Sie zwischen {binär, oktal, hexadezimal, dezimal} in {binär, oktal, hexadezimal, dezimal} konvertieren, indem Sie die rechte Seite des Doppelpunkts [:] ändern.
:#b -> converts to binary
:#o -> converts to octal
:#x -> converts to hexadecimal
:#0-> converts to decimal as above example
Versuchen Sie, die linke Seite des Doppelpunkts so zu ändern, dass sie oktal / hexadezimal / dezimal ist.
Für große Matrix (10 ** 5 Zeilen und mehr) ist es besser, ein vektorisiertes Matmult zu verwenden. Pass in allen Reihen und Spalten in einem Schuss. Es ist extrem schnell. In Python gibt es hier keine Schleifen. Ich habe es ursprünglich entworfen, um viele Binärspalten wie 0/1 für etwa 10 verschiedene Genre-Spalten in MovieLens in eine einzelne Ganzzahl für jede Beispielzeile zu konvertieren.
defBitsToIntAFast(bits):
m,n = bits.shape
a =2**np.arange(n)[::-1]# -1 reverses array of powers of 2 of same length as bitsreturn bits @ a
Antworten:
Sie verwenden die integrierte
int
Funktion und übergeben ihr die Basis der eingegebenen Nummer, dh2
für eine Binärzahl:Hier finden Sie eine Dokumentation für Python2 und für Python3 .
quelle
bin(255)
->'0b11111111'
. Weitere Details finden Sie in dieser Antwort .>>>
Eingabeaufforderung vorgeschlagen) überhaupt keine Verwendung benötigenprint
. Das hypothetische Beispiel des OP tat es nicht. Also sollte es in Python 2 und 3 wirklich identisch sein.Geben Sie einfach 0b11111111 in die interaktive Python-Oberfläche ein:
quelle
Eine andere Möglichkeit, dies zu tun, ist die Verwendung des
bitstring
Moduls:Beachten Sie, dass sich die vorzeichenlose Ganzzahl von der vorzeichenbehafteten Ganzzahl unterscheidet:
Das
bitstring
Modul ist keine Voraussetzung, verfügt jedoch über viele performante Methoden, um Eingaben in und von Bits in andere Formen umzuwandeln und diese zu bearbeiten.quelle
Die Verwendung von int mit base ist der richtige Weg. Früher habe ich das gemacht, bevor ich herausgefunden habe, dass int auch Basis ist. Es handelt sich im Grunde genommen um eine Reduzierung, die auf ein Listenverständnis der primitiven Art der Konvertierung von Binär in Dezimal angewendet wird (z. B. 110 = 2 ** 0 * 0 + 2 ** 1 * 1 + 2 ** 2 * 1).
quelle
add = lambda x, y: x + y
,int.__add__
kann zur Reduzierung bereitgestellt werden. ZBreduce(int.__add__, ...)
quelle
Eine rekursive Python-Implementierung:
quelle
Binär bis dezimal:
binär zu oktal hexa und etc.
Achten Sie auf 2 Informationen, die durch einen Doppelpunkt getrennt sind.
Auf diese Weise können Sie zwischen {binär, oktal, hexadezimal, dezimal} in {binär, oktal, hexadezimal, dezimal} konvertieren, indem Sie die rechte Seite des Doppelpunkts [:] ändern.
Versuchen Sie, die linke Seite des Doppelpunkts so zu ändern, dass sie oktal / hexadezimal / dezimal ist.
quelle
Für große Matrix (10 ** 5 Zeilen und mehr) ist es besser, ein vektorisiertes Matmult zu verwenden. Pass in allen Reihen und Spalten in einem Schuss. Es ist extrem schnell. In Python gibt es hier keine Schleifen. Ich habe es ursprünglich entworfen, um viele Binärspalten wie 0/1 für etwa 10 verschiedene Genre-Spalten in MovieLens in eine einzelne Ganzzahl für jede Beispielzeile zu konvertieren.
quelle