it-swarm.com.de

Umwandlung von Ganzzahl in Binär in Python

Um eine Ganzzahl in eine Binärdatei zu konvertieren, habe ich diesen Code verwendet:

>>> bin(6)  
'0b110'

und wenn ich die '0b' löschen möchte, verwende ich Folgendes:

>>> bin(6)[2:]  
'110'

Was kann ich tun, wenn ich 6 anstelle von 00000110 als 110 anzeigen möchte?

131
Smith
>>> '{0:08b}'.format(6)
'00000110'

Um nur die Teile der Formatierungszeichenfolge zu erläutern:

  • {} platziert eine Variable in eine Zeichenfolge
  • 0 nimmt die Variable an Argumentposition 0 an
  • : fügt Formatierungsoptionen für diese Variable hinzu (ansonsten würde sie dezimale 6 darstellen)
  • 08 formatiert die Zahl auf acht Ziffern, die links mit Nullen aufgefüllt werden
  • b konvertiert die Zahl in ihre binäre Darstellung

Wenn Sie eine Version von Python 3.6 oder höher verwenden, können Sie auch f-Strings verwenden:

>>> f'{6:08b}'
'00000110'
283
eumiro

Nur eine andere Idee:

>>> bin(6)[2:].zfill(8)
'00000110'

Kürzerer Weg durch String Interpolation (Python 3.6+):

>>> f'{6:08b}'
'00000110'
85
mshsayem

Eine etwas zweideutige Methode ...

>>> bin8 = lambda x : ''.join(reversed( [str((x >> i) & 1) for i in range(8)] ) )
>>> bin8(6)
'00000110'
>>> bin8(-3)
'11111101'
17
sobel

Verwenden Sie einfach die Formatierungsfunktion

format(6, "08b")

Die allgemeine Form ist 

format(<the_integer>, "<0><width_of_string><format_specifier>")
12
theOne

die Antwort von eumiro ist besser, aber ich poste dies nur zur Abwechslung:

>>> "%08d" % int(bin(6)[2:])
00000110
8
jedwards

.. oder wenn Sie sich nicht sicher sind, dass es immer aus 8 Ziffern bestehen soll, können Sie es als Parameter übergeben:

>>> '%0*d' % (8, int(bin(6)[2:]))
'00000110'
5
thebjorn

Going Old School funktioniert immer

def intoBinary(number):
binarynumber=""
if (number!=0):
    while (number>=1):
        if (number %2==0):
            binarynumber=binarynumber+"0"
            number=number/2
        else:
            binarynumber=binarynumber+"1"
            number=(number-1)/2

else:
    binarynumber="0"

return "".join(reversed(binarynumber))
1
('0' * 7 + bin(6)[2:])[-8:]

oder

right_side = bin(6)[2:]
'0' * ( 8 - len( right_side )) + right_side
0
zerg

numpy.binary_repr(num, width=None) hat ein magisches Argument für die Breite

Relevante Beispiele aus der oben verlinkten Dokumentation:

>>> np.binary_repr(3, width=4)
'0011'

Das Zweierkomplement wird zurückgegeben, wenn die eingegebene Zahl negativ ist und die Breite angegeben wird:

>>> np.binary_repr(-3, width=5)
'11101'
0
Tom Hale