¿Cómo convierto una cadena hexadecimal a un int en Python?
Puedo tenerlo como " 0xffff
" o simplemente " ffff
".
Sin el prefijo 0x, debe especificar la base explícitamente, de lo contrario no hay forma de saber:
x = int("deadbeef", 16)
Con el prefijo 0x, 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 prefijo; omitir el segundo parámetro significa asumir base-10).
int("FFFF",16)
convertirme a -1.int(hexString, 16)
hace el truco y funciona con y sin el prefijo 0x:fuente
Para cualquier cadena dada s:
fuente
Para convertir una cadena en un int, pasa la cadena
int
junto con la base desde la que estás convirtiendo.Ambas cadenas serán suficientes para la conversión de esta manera:
Dejar
int
inferirSi pasa 0 como base,
int
inferirá la base del prefijo en la cadena.Sin el prefijo hexadecimal,
0x
,int
no tiene suficiente información con la que adivinar:literales:
Si está escribiendo en el código fuente o en un intérprete, Python hará la conversión por usted:
Esto no funcionará
ffff
porque Python pensará que estás intentando escribir un nombre legítimo de Python en su lugar: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.
fuente
Agregando a la respuesta de Dan anterior: si proporciona la función int () con una cadena hexadecimal, tendrá que especificar la base como 16 o no pensará que le dio un valor válido. No es necesario especificar la base 16 para los números hexadecimales no contenidos en las cadenas.
fuente
La peor manera:
¡Por favor no hagas esto!
¿Usar eval en Python es una mala práctica?
fuente
eval
también es absurdamente lento, además de todos los otros problemas con él.int(s,16)
devolución de valores incorrectos, causando algunos problemas importantes con mi tiempo de ejecución (int(hex(value),16) == int(value) >>> False
). la cadena suministrada aeval()
era segura y el valor devuelto era correcto.O
ast.literal_eval
(esto es seguro, a diferenciaeval
):Manifestación:
fuente
La opción de formateador '% x'% parece funcionar también en las declaraciones de asignación para mí. (Suponiendo Python 3.0 y posterior)
Ejemplo
fuente
print(b)
dará salida256
, no100
yprint(c)
dará salida100
, no256
. También tenga en cuenta quec
es una cadena, peroa
no es así, su respuesta en realidad convierte un int en una cadena, y no al revés (de esto se trata la pregunta).Si está utilizando el intérprete de Python, puede escribir 0x (su valor hexadecimal) y el intérprete lo convertirá automáticamente.
fuente
Maneja hexadecimal, octal, binario, int y flotante
Usando los prefijos estándar (es decir, 0x, 0b, 0 y 0o) esta función convertirá cualquier cadena adecuada a un número. Respondí esto aquí: https://stackoverflow.com/a/58997070/2464381 pero aquí está la función necesaria.
fuente
En Python 2.7,
int('deadbeef',10)
no parece funcionar.Lo siguiente funciona para mí:
fuente
con el prefijo '0x', también puede usar la función eval
Por ejemplo
fuente
ast.literal_eval
.