es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Función hexdump en Python La función hexdump en Python es utilizada para mostrar el contenido de un archivo o una cadena de datos en formato hexadecimal. Esta función convierte cada byte de datos en su representación hexadecimal y la muestra en conjuntos de 16 bytes por línea, junto con la representación ASCII si es posible. Aquí está un ejemplo de cómo se puede implementar la función hexdump en Python: “`python def hexdump(data): length = len(data) for i in range(0, length, 16): line = data[i:i+16] hex_chars = ‘ ‘.join([‘{:02X}’.format(byte) for byte in line]) ascii_chars = ”.join([chr(byte) if 32 <= byte < 127 else '.' for byte in line]) print(f'{hex_chars} {ascii_chars}') # Ejemplo de uso data = b'Hello, world!' hexdump(data) ``` Resultado: ``` 48 65 6C 6C 6F 2C 20 77 6F 72 6C 64 21 Hello, world! ``` Espero que esta información sea de ayuda. Si tienes alguna pregunta adicional, no dudes en hacerla.

Con el siguiente código en Python:

zero = '00000000000000000000000000000000'
print(bytes.fromhex(zero))
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'

three = '33333333333333333333333333333333'
print(bytes.fromhex(three))
b'3333333333333333'

Al imprimir bytes.fromhex(zero), se imprime exactamente 32 caracteres en hexadecimal.

Pero al imprimir bytes.fromhex(three), solo se imprimen 16 caracteres. Ambas cadenas, zero y three tienen la misma longitud: 32.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    La razón de esta diferencia en la salida se debe a que cada dígito hexadecimal representa 4 bits de información. Por lo tanto, una cadena de 32 dígitos hexadecimales representa 128 bits, o 16 bytes. En el caso de “cero”, cada dígito es un “0”, por lo que los bytes resultantes están todos representados por el byte nulo \x00. Sin embargo, en el caso de “tres”, cada dígito es un valor distinto de cero, por lo que ninguno de los bytes resultantes está representado por el byte nulo \x00. Esto significa que los bytes resultantes pueden ser representados por menos dígitos hexadecimales, específicamente 16. Por lo tanto, la longitud de la cadena de entrada no corresponde directamente a la longitud de los bytes de salida.

Comments are closed.