Python >> Tutoriel Python >  >> Python

Python Print Hex sans '0x'

Formulation du problème

Si vous imprimez un nombre hexadécimal, Python utilise le préfixe '0x' pour indiquer qu'il s'agit d'un nombre dans le système hexadécimal et non dans le système décimal comme les entiers normaux.

print(hex(42))
# 0x2a

Cependant, si vous savez déjà que les numéros de sortie sont hexadécimaux, vous n'avez pas nécessairement besoin du '0x' préfixe.

Comment imprimer des nombres hexadécimaux sans le '0x' préfixe ?

Méthode 1 :Découpage

Pour ignorer le préfixe, utilisez le découpage en tranches et commencez par l'index 2 sur la chaîne hexadécimale. Par exemple, pour ignorer le préfixe '0x' sur le résultat de x = hex(42) ='0x2a' , utilisez l'opération de découpage x[2:] qui donne juste le nombre hexadécimal '2a' sans le préfixe '0x' .

x = hex(42)

print(x)
# 0x2a

print(x[2:])
# 2a

N'hésitez pas à plonger dans le hex() fonction intégrée dans ce didacticiel vidéo :

Mais que se passe-t-il si vous voulez réellement remplacer le préfixe '0x' avec le préfixe '00' pour que la chaîne résultante ait la même longueur ?

Méthode 2 :découpage + zfill()

Le Python string.zfill() la méthode remplit la chaîne à partir de la gauche avec '0' personnages. En combinaison avec le découpage à partir du troisième caractère, vous pouvez facilement construire une chaîne hexadécimale sans commencer par '0x' caractères et commençant par '0' caractères jusqu'à la longueur passée dans le string.zfill(length) méthode.

print(hex(42)[2:].zfill(4))
# 002a

Sinon, si vous souhaitez créer une chaîne de 8 caractères, utilisez string.zfill(8) :

print(hex(42)[2:].zfill(8))
# 0000002a

Vous pouvez en savoir plus sur zfill() dans cette vidéo sur les méthodes de chaîne Python :

Méthode 3 :nombres hexadécimaux négatifs

Si vous devez gérer des nombres hexadécimaux négatifs, les méthodes ci-dessus ne fonctionnent pas car le nombre hexadécimal doit maintenant remplacer le deuxième et le troisième caractère '0x' . Par exemple, le nombre hexadécimal hex(-42) est '-0x2a' . Vous ne pouvez pas simplement sauter les deux premiers caractères pour obtenir le bon résultat, n'est-ce pas ? En même temps, si vous sautiez ou remplaciez toujours les deuxième et troisième caractères, cela ne fonctionnerait pas non plus pour les nombres positifs. Alors que faire ?

Pour imprimer un hexadécimal positif ou négatif sans le '0x' ou '-0x' préfixes, vous pouvez simplement utiliser le string.replace('x', '0') méthode et remplacer chaque occurrence de 'x' avec '0' . La chaîne résultante est mathématiquement correcte car le premier '0' s ne change pas la valeur du nombre.

# Negative Hexadecimal
print(hex(-42).replace('x', '0'))
# -002a


# Positive Hexadecimal
print(hex(42).replace('x', '0'))
# 002a