Convertir de binaire et de conserver les zéros non significatifs en Python
Je suis en train de convertir un nombre entier en binaire à l'aide de la corbeille() fonction en Python. Cependant, il est toujours supprime les zéros, dont j'ai réellement besoin, telle que le résultat obtenu est toujours 8 bits:
Exemple:
bin(1) -> 0b1
# What I would like:
bin(1) -> 0b00000001
Est-il un moyen de faire cela?
- Voir aussi: Python int binaire?, en particulier ma réponse les n bits de la représentation. Pas exactement le même, mais j'en suis venu à cette question de la recherche de ma réponse...
Vous devez vous connecter pour publier un commentaire.
Utiliser le
format()
function:La
format()
fonction simplement formats de l'entrée à la suite de la Spécification du Format mini de la langue. Le#
rend le format inclure la0b
préfixe, et le010
formats de sortie pour s'adapter à 10 caractères de largeur, avec0
rembourrage; 2 caractères pour le0b
préfixe, les 8 autres pour les chiffres binaires.C'est le plus compact et option directe.
Si vous êtes en plaçant le résultat dans une chaîne plus longue, utiliser un chaîne mise en forme littérale (3.6+) ou utiliser
str.format()
et mettre le second argument en faveur de laformat()
fonction après les deux points de l'espace réservé{:..}
:Comme il arrive, même juste pour le formatage d'une valeur unique (donc sans mettre le résultat dans une chaîne plus longue), à l'aide d'une chaîne mise en forme littérale est plus rapide que l'utilisation
format()
:Mais je préfère l'utiliser seulement si la performance dans une boucle serrée, les questions, comme
format(...)
communique l'intention de mieux.Si vous ne voulez pas le
0b
préfixe, il suffit de déposer le#
et d'ajuster la longueur du champ:format(192,'08b')+'.'+format(0,'08b')+'.'+format(2,'08b')+'.'+format(33,'08b')
11000000.00000000.00000010.00100001
str.format()
et mettre le deuxième argument de la fonction format() après les deux points de l'espace réservé{:..}
:f"{192:08b}.{0:08b}.{2:08b}.{33:08b}"
.Voir: Spécification Du Format Mini-Langue
Note pour Python 2.6 ou plus, vous ne pouvez pas omettre la position argument identificateur avant
:
, afin de l'utiliser'{:02x}'.format(16)
str.format()
ici quandformat()
fera. Il vous manque le0b
préfixe.format()
, car il vous permettra de faire plusieurs variables à la fois. J'oublie que leformat
fonction existe même. Certes, il est parfaitement adéquate dans ce cas.str.format()
avec juste un{}
élément, aucun autre texte, vous n'êtes pas à l'aide de la chaîne de création de modèles, vous êtes à la mise en forme d'une valeur. Dans ce cas il suffit d'utiliserformat()
. 🙂'00000001'
, pas'00000010'
.Je suis en utilisant
imprime
Vous pouvez utiliser la mise en forme de chaîne mini langue:
Démo:
De sortie:
EDIT:
basé sur @Martijn Pieters idée
#
. Il est égalementformat()
, ce qui vous évite d'avoir à faire un modèle de chaîne.Parfois vous voulez juste une simple doublure:
Python 3
[ ]
ne devrait pas être nécessaire -join()
accepte un générateur d'expression.''.join('{0:08b}'.format(ord(x)) for x in input)
Vous pouvez utiliser quelque chose comme cela
Vous pouvez utiliser zfill:
imprime:
J'aime cette solution, car elle permet non seulement lors de la sortie du numéro, mais quand vous devez l'affecter à une variable...
par exemple, -
x = str(datetime.date.aujourd'hui().mois).zfill(2) sera de retour x, '02' pour le mois de février.
bin(14)
donne ` '0b1110' etbin(14).zfill(8)
donne ` '000b1110' ` non ` '0b00001110' qui est ce qui est souhaité