Convertir en binaire et garder les zéros en Python

J'essaie de convertir un entier en binaire en utilisant la fonction bin () en Python. Cependant, il supprime toujours les zéros principaux, dont j'ai réellement besoin, de sorte que le résultat est toujours 8 bits:

Exemple:

bin(1) -> 0b1

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

Y a-t-il un moyen de le faire?

104
demandé sur Peter Mortensen 2013-06-04 23:41:19

8 réponses

Utiliser le format() la fonction:

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

La fonction format() formate simplement l'entrée en suivant la format Specification mini language . Le # fait que le format inclut le préfixe 0b, et la taille 010 formate la sortie en largeur de 10 caractères, avec un remplissage 0; 2 caractères pour le préfixe 0b, les 8 autres pour les chiffres binaires.

C'est L'option la plus compacte et la plus directe.

Si vous mettez le résultat dans un plus grand chaîne, utilisation str.format() et placez le deuxième argument de la fonction format() après les deux-points de l'espace réservé {:..}:

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

Si vous ne voulez pas le préfixe 0b, déposez simplement le # et ajustez la longueur du champ:

>>> format(14, '08b')
'00001110'
136
répondu Martijn Pieters 2015-12-11 15:04:10
>>> '{:08b}'.format(1)
'00000001'

Voir: Spécification De Format Mini-Langue


Note pour Python 2.6 ou plus, vous ne pouvez pas omettre l'identifiant de l'argument positionnel avant :, Utilisez donc

>>> '{0:08b}'.format(1)
'00000001'      
87
répondu bwbrowning 2017-08-01 11:48:02

J'utilise

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

Imprimera

'00000001'
12
répondu rekinyz 2015-12-10 22:58:00

Vous pouvez utiliser le langage mini de formatage de chaîne:

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

Démo:

print binary(1)

Sortie:

'0b00000001'

Modifier: basé sur l'idée de @ Martijn Pieters

def binary(num, length=8):
    return format(num, '#0{}b'.format(length + 2))
6
répondu Peter Varo 2013-06-04 20:03:25

Parfois, vous voulez juste un simple liner:

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

Python 3

1
répondu Mark 2017-01-02 01:45:15

Vous pouvez utiliser quelque chose comme ceci

("{:0%db}"%length).format(num)
0
répondu Adam 2015-03-31 16:41:58
module Adder(
    input upperBit, lowerBit, c_in,
    output s, c_out)

write gate1, gate2, gate3

xor (gate1, upperBit, lowerBit)
xor (s, gate1, c_in)
and (upperBit, lowerBit)
and (gate1, c_in)
or  (c_out, gate1, gate2)

endmodule

module ful_adder8(
    input [7:0) a, b
    input c_in
    output [7:0) s,
    output c_out)

write [7:0] carry

full_adder fa0(
    a(a[o])
    b(b[0])
    c_in(c_in)
    s(s[0])
    c_out(carry[0]))
full_adder fa0(
    a(a[o])
    b(b[0])
    c_in(c_in)
    s(s[0])
    c_out(carry[0]))
full_adder fa0(
    a(a[o])
    b(b[0])
    c_in(c_in)
    s(s[0])
    c_out(carry[0]))
full_adder fa0(
    a(a[o])
    b(b[0])
    c_in(c_in)
    s(s[0])
    c_out(carry[0]))
full_adder fa0(
    a(a[o])
    b(b[0])
    c_in(c_in)
    s(s[0])
    c_out(carry[0]))
full_adder fa0(
    a(a[o])
    b(b[0])
    c_in(c_in)
    s(s[0])
    c_out(carry[0]))
full_adder fa0(
    a(a[o])
    b(b[0])
    c_in(c_in)
    s(s[0])
    c_out(carry[0]))
full_adder fa0(
    a(a[o])
    b(b[0])
    c_in(c_in)
    s(s[0])
    c_out(carry[0]))

endmodule
test
def split (n):
    return (n&0x1,n&0x2,n&0x4,n&0x8,n&0x10,n&0x20,n&0x40,n&0x80)
def glue (b0,b1,b2,b3,b4,b5,b6,b7,c):
    t = 0
    if b0:
        t += 1
    if b1:
        t += 2
    if b2:
        t += 4
    if b3:
        t += 8
    if b4:
        t += 16
    if b5:
        t += 32
    if b6:
        t += 64
    if b7:
        t += 128
    if c:
        t += 256
    return t


def myadd (a,b):
    (a0,a1,a2,a3,a4,a5,a6,a7) = split(a)
    (b0,b1,b2,b3,b4,b5,b6,b7) = split(b)
    (s0,s1,s2,s3,s4,s5,s6,s7,c) = addEightBits(a0,a1,a2,a3,a4,a5,a6,a7,b0,b1,b2,b3,b4,b5,b6,b7,false)
    return glue (s0,s1,s2,s3,s4,s5,s6,s7,c)
0
répondu Daahir 2015-12-27 11:07:08

Vous pouvez utiliser zfill:

print str(1).zfill(2) 
print str(10).zfill(2) 
print str(100).zfill(2)

Impressions:

01
10
100

J'aime cette solution, car elle aide non seulement lors de la sortie du nombre, mais quand vous devez l'assigner à une variable... par exemple - x = str (datetime.date.aujourd'().mois).zfill (2)renverra x comme ' 02 ' pour le mois de février.

-1
répondu Anshul Garg 2016-09-20 14:27:10