it-swarm.com.de

Konvertiere nach binär und behalte führende Nullen in Python

Ich versuche, eine Ganzzahl mit der Funktion bin () in Python in eine Binärzahl umzuwandeln. Es werden jedoch immer die führenden Nullen entfernt, die ich tatsächlich benötige, so dass das Ergebnis immer 8-Bit ist:

Beispiel:

bin(1) -> 0b1

# What I would like:
bin(1) -> 0b00000001

Gibt es eine Möglichkeit, dies zu tun?

119

Verwenden Sie die Funktion format() :

>>> format(14, '#010b')
'0b00001110'

Die Funktion format() formatiert einfach die Eingabe nach Format Specification mini language . Mit # Wird festgelegt, dass das Format das Präfix 0b Enthält, und mit der Größe 010 Wird die Ausgabe so formatiert, dass sie in eine Breite von 10 Zeichen mit 0 Abstand passt. 2 Zeichen für das Präfix 0b, Die anderen 8 für die Binärziffern.

Dies ist die kompakteste und direkteste Option.

Wenn Sie das Ergebnis in eine größere Zeichenfolge einfügen, verwenden Sie ein formatiertes Zeichenfolgenliteral (3.6+) oder str.format() und geben Sie das zweite Argument für das ein format() Funktion nach dem Doppelpunkt des Platzhalters {:..}:

>>> value = 14
>>> f'The produced output, in binary, is: {value:#010b}'
'The produced output, in binary, is: 0b00001110'
>>> 'The produced output, in binary, is: {:#010b}'.format(value)
'The produced output, in binary, is: 0b00001110'

Selbst wenn Sie nur einen Wert formatieren (ohne das Ergebnis in eine größere Zeichenfolge zu setzen), ist die Verwendung eines formatierten Zeichenfolgenliteral schneller als die Verwendung von format():

>>> import timeit
>>> timeit.timeit("f_(v, '#010b')", "v = 14; f_ = format")  # use a local for performance
0.40298633499332936
>>> timeit.timeit("f'{v:#010b}'", "v = 14")
0.2850222919951193

Aber ich würde das nur verwenden, wenn Leistung in einer engen Schleife wichtig ist, da format(...) die Absicht besser kommuniziert.

Wenn Sie das Präfix 0b Nicht möchten, lassen Sie einfach das Präfix # Fallen und passen Sie die Länge des Feldes an:

>>> format(14, '08b')
'00001110'
168
Martijn Pieters
>>> '{:08b}'.format(1)
'00000001'

Siehe: Formatspezifikation Mini-Sprache


Hinweis für Python 2.6 oder älter, Sie können den Positionsargument-Bezeichner nicht vor : Weglassen, verwenden Sie also

>>> '{0:08b}'.format(1)
'00000001'      
100
bwbrowning

Ich benutze

bin(1)[2:].zfill(8)

wird gedruckt

'00000001'
20
rekinyz

Sie können die Minisprache für die Formatierung von Zeichenfolgen verwenden:

def binary(num, pre='0b', length=8, spacer=0):
    return '{0}{{:{1}>{2}}}'.format(pre, spacer, length).format(bin(num)[2:])

Demo:

print binary(1)

Ausgabe:

'0b00000001'

EDIT: basierend auf @Martijn Pieters Idee

def binary(num, length=8):
    return format(num, '#0{}b'.format(length + 2))
8
Peter Varo

Manchmal möchten Sie nur einen einfachen Einzeiler:

binary = ''.join(['{0:08b}'.format(ord(x)) for x in input])

Python 3

1
Mark

Sie können so etwas verwenden

("{:0%db}"%length).format(num)
0
Adam