print - Convertir cadena hexadecimal a int en Python
string hex to hex (10)
¿Cómo convierto una cadena hexadecimal a un int en Python?
Puedo tenerlo como " 0xffff
" o simplemente " ffff
".
Convertir cadena hexadecimal a int en Python
Puedo tenerlo como
"0xffff"
o simplemente"ffff"
.
Para convertir una cadena en un int, pase la cadena a 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 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 escribe en el código fuente o un intérprete, Python hará la conversión por usted:
>>> integer = 0xffff
>>> integer
65535
Esto no funcionará con ffff
porque Python pensará que estás intentando escribir un nombre de Python legítimo en su lugar:
>>> 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.
Agregando a la respuesta de Dan anterior: si proporciona la función int () con una cadena hexadecimal, deberá especificar la base como 16 o no pensará que le dio un valor válido. Especificar la base 16 no es necesario para los números hexadecimales no contenidos en cadenas.
print int(0xdeadbeef) # valid
myHex = "0xdeadbeef"
print int(myHex) # invalid, raises ValueError
print int(myHex , 16) # valid
En Python 2.7, int(''deadbeef'',10)
no parece funcionar.
Los siguientes trabajos para mí:
>>a = int(''deadbeef'',16)
>>float(a)
3735928559.0
La opción del formateador ''% x''% parece funcionar también en las declaraciones de asignación para mí. (Suponiendo Python 3.0 y versiones posteriores)
Ejemplo
a = int(''0x100'', 16)
print(a) #256
print(''%x'' % a) #100
b = a
print(b) #256
c = ''%x'' % a
print(c) #100
La peor manera:
>>> def hex_to_int(x):
return eval("0x" + x)
>>> hex_to_int("c0ffee")
12648430
Por favor no hagas esto!
O ast.literal_eval
(esto es seguro, a diferencia de eval
):
ast.literal_eval("0xffff")
Manifestación:
>>> import ast
>>> ast.literal_eval("0xffff")
65535
>>>
Para cualquier cadena dada s:
int(s, 16)
con el prefijo ''0x'', también puede usar la función eval
Por ejemplo
>>a=''0xff''
>>eval(a)
255
int(hexString, 16)
hace el truco, y trabaja con y sin el prefijo 0x:
>>> int("a", 16)
10
>>> int("0xa",16)
10
Sin el prefijo 0x, debe especificar la base explícitamente, de lo contrario no hay forma de decirlo:
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 la base para invocar este comportamiento de adivinación de prefijo; omitir el segundo parámetro significa asumir base-10).