Convertir una cadena hexadecimal a un número entero en Python
¿Cómo convierto una cadena hexadecimal en un número entero?
"0xffff" ⟶ 65535
"ffff" ⟶ 65535
Sin el 0x
prefijo, debe especificar la base explícitamente; de lo contrario, no hay forma de saberlo:
x = int("deadbeef", 16)
Con el 0x
prefijo, Python puede distinguir hexadecimal y decimal automáticamente:
>>> print(int("0xdeadbeef", 0))
3735928559
>>> print(int("10", 0))
10
( Debe especificar 0
como base para invocar este comportamiento de adivinación de prefijos; si omite el segundo parámetro, int()
asumirá base-10).
int(hexstring, 16)
funciona y funciona con y sin el prefijo 0x:
>>> int("a", 16)
10
>>> int("0xa", 16)
10
Convertir una cadena hexadecimal a int en Python
Puedo tenerlo como
"0xffff"
o simplemente"ffff"
.
Para convertir una cadena a un int, pase la cadena int
junto con la base desde la que está convirtiendo.
Ambas cadenas serán suficientes para la conversión de esta manera:
>>> string_1 = "0xffff"
>>> string_2 = "ffff"
>>> int(string_1, 16)
65535
>>> int(string_2, 16)
65535
Dejando int
inferir
Si pasa 0 como base, int
inferirá la base a partir del prefijo en la cadena.
>>> int(string_1, 0)
65535
Sin el prefijo hexadecimal 0x
, int
no tiene suficiente información para adivinar:
>>> int(string_2, 0)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 0: 'ffff'
literales:
Si está escribiendo el código fuente o un intérprete, Python realizará la conversión por usted:
>>> integer = 0xffff
>>> integer
65535
Esto no funcionará ffff
porque Python pensará que estás intentando escribir un nombre legítimo de Python:
>>> integer = ffff
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'ffff' is not defined
Los números de Python comienzan con un carácter numérico, mientras que los nombres de Python no pueden comenzar con un carácter numérico.
Para cualquier cadena dada s:
int(s, 16)