Programa de Python para imprimir una array de bytes que representan un número entero

Dado un número entero N , la tarea es escribir un programa en Python para representar los bytes de este número como una array. 

Un byte es un grupo de 8 bits. Cualquier número entero se puede representar en forma de bytes y bits. Generalmente usamos códigos hexadecimales para representar un byte. Un solo carácter hexadecimal puede representar 4 bits, por lo que se utilizan un par de caracteres hexadecimales para representar un byte. 

Ejemplo:

Entrada: N = 543

Salida: [‘0x2’, ‘0x1f’]

Explicación: 543 se puede representar como 1000011111 en binario que se puede agrupar como (10)(00011111), cada grupo representa un byte. En forma hexadecimal, este número será (0x02)(0x1F).

Entrada: N = 17292567

Salida: [‘0x1’, ‘0x7’, ‘0xdd’, ‘0x17’]

Explicación: 17292567 se puede representar como 1000001111101110100010111 en binario que se puede agrupar como (1)(00000111)(11011101)(00010111), cada grupo representa un byte. En forma hexadecimal, este número será (0x1), (0x7), (0xdd), (0x17).

Método 1 (Conversión manual):

Al igual que convertimos números decimales a números binarios, podemos convertirlo en un número de base 256 que nos dará números de 8 bits que representan bytes para el número dado. 

A continuación se muestra el código para implementar el método mencionado anteriormente:

Python3

n = 17292567
  
# Initialize the empty array
array = []
  
# Get the hexadecimal form
while(n):
    r = n % 256
    n = n//256
    array.append(hex(r))
      
# Reverse the array to get the MSB to left
array.reverse()
print(array)
Producción

['0x1', '0x7', '0xdd', '0x17']

Método 2 (usando el método to_bytes() ):

También podemos usar el método to_bytes(longitud,orden de bytes) para convertir el número en una string hexadecimal. Pero el problema con esta función es que durante la impresión, los códigos hexadecimales pueden convertirse a sus caracteres correspondientes en el esquema de codificación ASCII. Para superar esto, podemos usar el método hex() sobre este método. Toma dos argumentos, ‘ longitud ‘ es el tamaño de la array y ‘ orden de bytes es el orden de los bytes donde » grande» significa que el MSB estará a la izquierda y » pequeño» significa que el MSB estará a la derecha.

A continuación se muestra el código para implementar el método mencionado anteriormente:

Python3

import math
  
  
n = 543
  
# Calculate the length of array
size = int(math.log(n, 256))+1
  
# Use the method to_bytes() with "big" 
# or "little" property We need to apply
# hex() method to avoid the conversion 
# into ASCII letters
hexForm = n.to_bytes(size, "big").hex()
  
# Append 8 bits together ie pair of 4 bits to get a byte
array = []
for i in range(0, len(hexForm), 2):
    array.append('0x'+hexForm[i]+hexForm[i+1])
print(array)
Producción

['0x02', '0x1f']

Método 3 (usando comandos de formato de string):

En Python, hay un comando de string «%x» que puede convertir el entero dado en formato hexadecimal. Podemos usar esto para obtener el resultado deseado.

A continuación se muestra el código para implementar el método mencionado anteriormente:

Python3

n = 8745
  
# Get string representation of hex code
hexcode = "%x" % n
  
# Pad an extra 0 is length is odd
if len(hexcode) & 1:
    hexcode = "0"+hexcode
  
array = []
for i in range(0, len(hexcode), 2):
    array.append('0x'+hexcode[i]+hexcode[i+1])
print(array)
Producción

['0x22', '0x29']

Publicación traducida automáticamente

Artículo escrito por mukulbindal170299 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *