Convierte la cadena hexadecimal en Int en Python

Rayven Esplanada 10 octubre 2023
  1. Usa int() para convertir el hexadecimal en int en Python
  2. Convierte una cadena hexadecimal no prefijada a Int en Python
  3. Convierte la cadena hexadecimal prefijada a Int en Python
  4. Convertir la pequeña y gran cadena hexadecimal de Endian a Int en Python
  5. Convertir hexadecimal a entero con signo en Python
Convierte la cadena hexadecimal en Int en Python

Este tutorial demostrará cómo convertir la cadena de hexadecimals en int en Python. Cubrirá diferentes formatos de hexadecimals como el firmado, pequeño y grande, hexadecimal comentado 0x, y la cadena de hexadecimals por defecto.

Usa int() para convertir el hexadecimal en int en Python

La forma más común y efectiva de convertir un hexadecimal en un número entero en Python es usar la función de escribir int().

Esta función acepta dos argumentos: uno obligatorio, que es el valor a convertir, y un segundo opcional, que es la base del formato de los números con el valor por defecto 10.

Otros formatos de números son 2 para binario, 8 para octal, y 16 para hexadecimal. Si pones 0 como argumento para el valor base, derivará el formato de número del prefijo del valor. Si no hay ningún prefijo, lo reconocerá automáticamente como un decimal, 0b para binario, 0o para octal y 0x para hexadecimal.

Convierte una cadena hexadecimal no prefijada a Int en Python

Si la cadena hexadecimal no tiene prefijo, entonces especifique que el valor base de la función int() sea 16.

Por ejemplo:

hex_val = "beef101"

print(int(hex_val, 16))

Resultado:

200208641

El resultado es la conversión decimal o entera del valor hexadecimal beef101.

Convierte la cadena hexadecimal prefijada a Int en Python

Si la cadena hexadecimal tiene un prefijo 0x, entonces cambia el argumento del valor base a 0 para detectar el prefijo automáticamente.

Todavía puedes pasar 16 como base, pero si estás tratando con múltiples valores con diferentes formatos de números, pasar 0 es el mejor enfoque.

hex_val = "0xdeadcab"

print(int(hex_val, 0))
print(int(hex_val, 16))

Resultado:

233495723
233495723

Convertir la pequeña y gran cadena hexadecimal de Endian a Int en Python

Las órdenes de bytes de endian y big-endian son dos tipos de sistemas de ordenamiento para el hexadecimal. El orden por defecto es el little-endian, que pone el número más significativo en la parte más a la derecha de la secuencia, mientras que el big-endian hace lo contrario.

Teniendo esto en cuenta, todo lo que tenemos que considerar es convertir el valor hexadecimal del big-endian en un little-endian. Después, se puede realizar la conversión habitual en él.

Para convertir una cadena hexadecimal big-endian en una little-endian, usa bytearray.fromhex() y usa la función reverse() en el resultado. Después, convierta el valor hexadecimal de nuevo en cadena y conviértalo en un entero.

big_endian = "efbe"


def to_little(val):
    little_hex = bytearray.fromhex(val)
    little_hex.reverse()
    print("Byte array format:", little_hex)

    str_little = "".join(format(x, "02x") for x in little_hex)

    return str_little


little_endian = to_little(big_endian)

print("Little endian hex:", little_endian)
print("Hex to int:", int(little_endian, 16))

Para resumir este bloque de código:

  • Llama a bytearray.fromhex() para convertir la cadena hexadecimal de big-endian en un valor hexadecimal de byte array.
  • Invierte del array de bytes para convertir el big-endian en un formato little-endian.
  • Convierte el valor del array de bytes de nuevo en una cadena de formato hexadecimal en little-endian.
  • Convierte la cadena en un número entero usando int().

Resultado:

Byte array format: bytearray(b'\xbe\xef')
Little endian hex: beef
Hex to int: 48879

Convertir hexadecimal a entero con signo en Python

La conversión de cualquier formato de número en un entero firmado necesitaría una operación llamada el Complemento de dos, que es una operación matemática poco inteligente para calcular los números firmados.

Así que antes de que podamos convertir un hexadecimal en un número entero con signo, necesitaríamos definir una función que llevara a cabo la operación del Complemento de Dos.

def twosComplement_hex(hexval):
    bits = 16  # Number of bits in a hexadecimal number format
    val = int(hexval, bits)
    if val & (1 << (bits - 1)):
        val -= 1 << bits
    return val

El bit más a la izquierda de un valor binario se llama el bit con signo, determinando si el entero es positivo o negativo. Esta función reservará ese bit como el bit con signo y desplazará los otros bits para compensar usando el operador de desplazamiento a la izquierda <<.

Ahora, pasando a la conversión real del valor hexadecimal a int. con signo.

hex_val1 = "ff"
hex_val2 = "ffff"
hex_val3 = "aaff"


def twosComplement_hex(hexval):
    bits = 16
    val = int(hexval, bits)
    if val & (1 << (bits - 1)):
        val -= 1 << bits
    return val


print(twosComplement_hex(hex_val1))
print(twosComplement_hex(hex_val2))
print(twosComplement_hex(hex_val3))

Resultado:

255
-1
-21761

Ahora, hemos logrado convertir una cadena hexadecimal en un entero con signo.

En resumen, hemos cubierto la conversión de diferentes tipos de formatos hexadecimales en enteros con y sin signo. Utilice int() con los argumentos de valor y base para convertir un hexadecimal en un entero sin signo.

Si el hexadecimal está en un formato big-endian, conviértalo en un formato little-endian primero usando bytearray.fromhex() y reverse().

Por último, si necesita convertir una cadena hexadecimal a un entero con signo, realice la operación de complemento a dos en el valor hexadecimal para obtener un valor entero con signo.

Rayven Esplanada avatar Rayven Esplanada avatar

Skilled in Python, Java, Spring Boot, AngularJS, and Agile Methodologies. Strong engineering professional with a passion for development and always seeking opportunities for personal and career growth. A Technical Writer writing about comprehensive how-to articles, environment set-ups, and technical walkthroughs. Specializes in writing Python, Java, Spring, and SQL articles.

LinkedIn

Artículo relacionado - Python Hex

Artículo relacionado - Python Integer