235 votes

Convertir en binaire et garder les zéros de tête

J'essaie de convertir un nombre entier en binaire à l'aide de la fonction bin() en Python. Cependant, elle supprime toujours les zéros de tête, dont j'ai besoin, de sorte que le résultat est toujours sur 8 bits :

Exemple :

bin(1) -> 0b1

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

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

144voto

bwbrowning Points 1023
>>> '{:08b}'.format(1)
'00000001'

Voir : Mini-langage de spécification de format


Remarque : pour Python 2.6 ou plus ancien, vous ne pouvez pas omettre l'identifiant de l'argument positionnel avant la commande : donc utiliser

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

47voto

user1146450 Points 2429

J'utilise

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

imprimera

'00000001'

11voto

ruohola Points 15945

Lorsque vous utilisez Python >= 3.6 le moyen le plus propre est d'utiliser Cordes en F avec formatage des chaînes :

>>> var = 23
>>> f"{var:#010b}"
'0b00010111'

Explication :

  • var la variable à formater
  • : tout ce qui suit est le spécificateur de format
  • # utiliser la forme alternative (ajoute le 0b préfixe)
  • 0 rembourrer avec des zéros
  • 10 pour une longueur totale de 10 caractères (y compris les 2 caractères pour le nom de l'utilisateur). 0b )
  • b utiliser la représentation binaire pour le nombre

10voto

Peter Varo Points 3599

Vous pouvez utiliser le mini-langage de formatage des chaînes de caractères :

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

Démonstration :

print binary(1)

Sortie :

'0b00000001'

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

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

6voto

Rustam A. Points 46

J'aime le formatage python f-string pour des choses un peu plus complexes comme l'utilisation d'un paramètre dans le format :

>>> x = 5
>>> n = 8
>>> print(f"{x:0{n}b}")
00000101

Ici, j'imprime la variable x avec le formatage suivant : Je veux qu'il soit rempli à gauche avec 0 pour avoir de la longueur = n en b (binaire). Voir le mini-langage de spécification de format dans les réponses précédentes pour en savoir plus.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X