python hex padding built-in

format python



Decorando la funciĆ³n hexagonal para rellenar los ceros. (4)

Qué tal esto:

print ''0x%04x'' % 42

Escribí esta simple función:

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)

Ejemplos:

padded_hex(42,4) # result ''0x002a'' hex(15) # result ''0xf'' padded_hex(15,1) # result ''0xf''

Si bien esto es lo suficientemente claro para mí y se adapta a mi estuche de uso (una herramienta de prueba simple para una impresora simple) no puedo dejar de pensar que hay mucho margen de mejora y esto podría reducirse a algo muy conciso.

¿Qué otros enfoques hay para este problema?


Si solo para los ceros zfill , puedes probar la función zfill .

''0x'' + hex(42)[2:].zfill(4) #''0x002a''


Usa * para pasar ancho y X para mayúsculas

print ''0x%0*X'' % (4,42) # ''0x002A''

Según lo sugerido por georg y Ashwini Chaudhary


Use el nuevo método de cadena .format() :

>>> "{0:#0{1}x}".format(42,6) ''0x002a''

Explicación:

{ # Format identifier 0: # first parameter # # use "0x" prefix 0 # fill with zeroes {1} # to a length of n characters (including 0x), defined by the second parameter x # hexadecimal number, using lowercase letters for a-f } # End of format identifier

Si desea que los dígitos hexadecimales de las letras estén en mayúsculas, pero el prefijo con una ''x'' en minúsculas, necesitará una pequeña solución:

>>> ''0x{0:0{1}X}''.format(42,4) ''0x002A''

A partir de Python 3.6, también puedes hacer esto:

>>> value = 42 >>> padding = 6 >>> f"{value:#0{padding}x}" ''0x002a''