print hexadecimal python string hex

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



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).