La décoration fonction Hex pour compléter les zéros
J'ai écrit cette fonction simple:
def padded_hex(i, l):
given_int = i
given_len = l
hex_result = hex(given_int)[2:] # remove '0x' from beginning of str
num_hex_chars = len(hex_result)
extra_zeros = '0' * (given_len - num_hex_chars) # may not get used..
return ('0x' + hex_result if num_hex_chars == given_len else
'?' * given_len if num_hex_chars > given_len else
'0x' + extra_zeros + hex_result if num_hex_chars < given_len else
None)
Exemples:
padded_hex(42,4) # result '0x002a'
hex(15) # result '0xf'
padded_hex(15,1) # result '0xf'
Alors que c'est assez clair pour moi et adapté à mon cas d'utilisation (un simple outil de test pour une simple imprimante) je peux pas m'empêcher de penser qu'il y a beaucoup de place pour de l'amélioration, ce qui pourrait être écrasé à quelque chose de très concis.
Ce que d'autres approches sont là pour ce problème?
Vous devez vous connecter pour publier un commentaire.
Utiliser le nouveau
.format()
méthode de chaîne:Explication:
Si vous voulez la lettre hex chiffres majuscules, mais le préfixe avec une minuscule "x", vous aurez besoin d'une légère solution de contournement:
De commencer avec Python 3.6, vous pouvez également le faire:
value = 42; padding = 6; f"{value:#0{padding}x}"
renvoie une erreur de syntaxe: ` Fichier "<stdin>", line 1 f"{valeur:#0{padding}x}" ^ SyntaxError: invalid syntaxe`import sys; print(sys.version)
à assurez-vous que vous utilisez le bon interprète.Comment à ce sujet:
*
passer largeur:'0x%0*x' % (4,42)
Utilisation
*
passer largeur etX
pour la majusculeComme suggéré par georg et Ashwini Chaudhary
Si juste pour les zéros en tête, vous pouvez essayer de
zfill
fonction.Supposons que vous voulez avoir zéros pour nombre hexadécimal, par exemple, vous voulez que 7 chiffres où votre nombre hexadécimal doit être écrit sur, vous pouvez le faire comme ça :
Cela donne comme résultat :
'%0*x' % (7,0xfff)