HOWTO · Python

Convierte la cadena hexadecimal en Int en Python

Demuestra cómo convertir hexadecimales a enteros en Python

En esta página

Usa int(value, 16) para convertir una cadena hexadecimal en un entero en Python. Usa la base 0 para que Python detecte el prefijo 0x, y int.from_bytes() cuando la entrada represente bytes cuyo orden o ancho con signo debas especificar.

Usa int() para convertir hexadecimal a entero en Python

La función int() acepta una cadena y una base opcional. La base predeterminada es 10, así que debes pasar 16 para indicar que el texto es hexadecimal. En int(value, base), el segundo argumento indica la base de la cadena de entrada; no representa el ancho en bits. Sustituye value por el texto hexadecimal que quieras analizar.

Convierte una cadena hexadecimal sin prefijo a entero en Python

Si los dígitos hexadecimales no llevan el prefijo 0x o 0X, indica explícitamente la base 16. Esto resulta útil para valores leídos de archivos de texto, API o entradas del usuario.

hex_string = "1a"
integer_value = int(hex_string, 16)
print(integer_value)
26

El resultado es 26: la base 16 indica a int() que interprete cada dígito como hexadecimal. Si la cadena incluye un prefijo, puedes usar la base 16 o dejar que int() lo detecte, como se muestra a continuación.

Convierte una cadena hexadecimal con prefijo a entero en Python

Para texto hexadecimal con prefijo, la base 0 indica a int() que deduzca la base a partir de un prefijo reconocido, como 0x o 0X. La base 16 también acepta estos prefijos; la base 0 es útil si la entrada puede incluir otros prefijos de enteros de Python.

hex_string = "0x1a"
integer_value = int(hex_string, 0)
print(integer_value)
26

Como la cadena empieza por 0x, Python interpreta los dígitos restantes como hexadecimales y obtiene 26. La base 0 requiere un prefijo reconocido: no interpreta automáticamente como hexadecimal el texto que carece de prefijo. Si la entrada no lleva prefijo, usa la base 16.

Convierte una cadena hexadecimal a entero en Python con little-endian y big-endian

Los órdenes de bytes little-endian y big-endian describen cómo se convierten en un entero los bytes de una secuencia; el texto hexadecimal por sí solo no tiene un orden de bytes predeterminado. Para los bytes ef be, big-endian coloca ef primero, mientras que little-endian trata ef como el byte menos significativo. Pasa el orden deseado a int.from_bytes():

data = bytes.fromhex("ef be")
big_value = int.from_bytes(data, byteorder="big")
little_value = int.from_bytes(data, byteorder="little")
print(big_value, little_value)
61374 48879

bytes.fromhex() crea la secuencia de dos bytes, y byteorder determina cómo contribuye cada byte al resultado: big-endian produce 61374 y little-endian, 48879. Así se especifica el orden de bytes sin tener que invertir manualmente una cadena hexadecimal.

Convierte hexadecimal a entero con signo en Python

Una llamada normal como int("ffff", 16) devuelve un entero no negativo. Para interpretar los dígitos hexadecimales como un valor con signo, define el ancho en bytes y decodifica esos bytes con signed=True. En un valor de 16 bits, ffff representa -1 en complemento a dos:

hex_string = "ffff"
data = bytes.fromhex(hex_string)
signed_value = int.from_bytes(data, byteorder="big", signed=True)
print(signed_value)
-1

bytes.fromhex("ffff") proporciona dos bytes, así que esta conversión con signo tiene un ancho de 16 bits y devuelve -1. El bit más significativo está activado y el complemento a dos determina el valor con signo. Elige el orden de bytes y el ancho según el formato de los datos que estés decodificando; int() no deduce ninguno de los dos por sí solo.