Pregunta Convierta cadena hexadecimal a int en Python


¿Cómo convierto una cadena hexadecimal en int en Python?

Puedo tenerlo como "0xffff" o solo "ffff".


569
2017-10-16 17:28


origen


Respuestas:


Sin el prefijo 0x, necesita especificar la base explícitamente; de ​​lo contrario, no hay forma de saberlo:

x = int("deadbeef", 16)

Con el prefijo 0x, Python puede distinguir el hexadecimal y el decimal automáticamente.

>>> print int("0xdeadbeef", 0)
3735928559
>>> print int("10", 0)
10

(Tú debe especificar 0 como la base para invocar este comportamiento de adivinar el prefijo; omitir el segundo parámetro significa asumir base-10).


821
2017-10-16 17:37



int(hexString, 16) hace el truco, y funciona con y sin el prefijo 0x:

>>> int("a", 16)
10
>>> int("0xa",16)
10

128
2017-10-16 17:32



Para cualquier cadena dada s:

int(s, 16)

38
2017-10-16 17:32



Convierta cadena hexadecimal a int en Python

Puedo tenerlo como "0xffff" o solo "ffff".

Para convertir una cadena en 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

Dejar int inferir

Si pasas 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 está escribiendo 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 tratando de 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.


19
2018-05-14 02:50



Añadiendo 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 creerá que le dio un valor válido. Especificar la base 16 no es necesario para los números hexadecimales que no están contenidos en las cadenas.

print int(0xdeadbeef) # valid

myHex = "0xdeadbeef"
print int(myHex) # invalid, raises ValueError
print int(myHex , 16) # valid

11
2018-06-30 16:25



La peor forma:

>>> def hex_to_int(x):
    return eval("0x" + x)

>>> hex_to_int("c0ffee")
12648430

Por favor no hagas esto!

¿Está utilizando eval en Python una mala práctica?


3
2018-01-17 13:20



En Python 2.7, int('deadbeef',10) no parece funcionar

Lo siguiente funciona para mí:

>>a = int('deadbeef',16)
>>float(a)
3735928559.0

1
2018-05-16 00:13



La opción de formateador '% x'% parece funcionar también en las declaraciones de asignación. (Asumiendo Python 3.0 y posterior)

Ejemplo 

a = int('0x100', 16)
print(a)   #256
print('%x' % a) #100
b = a
print(b) #256
c = '%x' % a
print(c) #100

1
2018-06-22 11:10



con el prefijo '0x', también puede usar la función eval

Por ejemplo

>>a='0xff'
>>eval(a)
255

-3
2017-08-21 06:39



Para convertir un DWORD de hexadecimal en un entero con signo, implemente el complemento de dos como este:

~ (0xffffffff - int('0xdeadbeef', 16)) + 1

-4
2018-03-15 14:14