Me preguntaba si hay alguna manera fácil y rápida de obtener el valor decimal de un hexadecimal firmado en Python.

Lo que hago para verificar el valor de un código hexadecimal es abrir Python en la terminal y escribir el hexadecimal, devuelve el decimal de esta manera:

>>>0x0024
36
>>>0xcafe
51966

Entonces me preguntaba, ¿hay alguna manera de que pueda hacer eso para un hex corto firmado? por ejemplo, 0xfffc debería devolver -4

1
LeedMx 25 feb. 2018 a las 10:56

3 respuestas

La mejor respuesta

Si puede usar los tipos numéricos NumPy, podría usar la conversión de tipo np.int16

>>> import numpy as np
>>> np.int16(0x0024)
36
>>> np.int16(0xcafe)
-13570
>>> np.int16(0xfffc)
-4
>>> np.uint16(0xfffc)
65532
>>> np.uint16(0xcafe)
51966

Python Language especifica una representación unificada para números enteros, el numbers.Integral clase, un subtipo de numbers.Rational. En Python 3 no hay restricciones específicas en el rango de este tipo. En Python 2 solo se especifica el rango mínimo, es decir, numbers.Integral debe tener al menos el rango de -2147483648 a 2147483647, que corresponde a la representación de 32 bits.

La implementación de NumPy está más cerca de la arquitectura de la máquina. Para implementar operaciones numéricas de manera eficiente, proporciona tipos de datos de ancho fijo, tales como int8, int16, int32 y int64.

0
Dmitri Chubarov 25 feb. 2018 a las 08:18

Puede usar el método de clase int from_bytes y proporcionarle los bytes:

>>> int.from_bytes(b'\xfc\xff', signed=True, byteorder='little')
-4
2
juanpa.arrivillaga 25 feb. 2018 a las 08:21
import ctypes

def hex2dec(v):
    return ctypes.c_int16(v).value

print hex2dec(0xfffc)
print hex2dec(0x0024)
print hex2dec(0xcafe)
1
atline 25 feb. 2018 a las 08:37