Conversión de HEX a DEC FIRMADO en python

Tengo un archivo con datos HEX. Quiero convertirlo en SIGNED DECIMAL usando python. int('0xffd2',16) no es la solución, ya que convierte el HEX en DEC sin signo. ¿Alguna idea de cómo hacerlo?

 0xffd2, 65490 0xffcb, 65483 0xffcb, 65483 0xffcc, 65484 0x10, 16 0xc, 12 0xd, 13 0x0, 0 0xfffe, 65534 

Puede interpretar los bytes como un entero con signo de complemento de dos utilizando operaciones a nivel de bits. Por ejemplo, para un número de 16 bits:

 def s16(value): return -(value & 0x8000) | (value & 0x7fff) 

Por lo tanto:

 >>> s16(int('0xffd2', 16)) -46 >>> s16(int('0xffcb', 16)) -53 >>> s16(int('0xffcc', 16)) -52 >>> s16(int('0x10', 16)) 16 >>> s16(int('0xd', 16)) 13 >>> s16(int('0x0', 16)) 0 >>> s16(int('0xfffe', 16)) -2 

Esto se puede extender a cualquier cadena de longitud de bits, configurando las máscaras para que la primera máscara coincida con el bit más significativo ( 0x8000 == 1 << 15 == 0b1000000000000000 ) y la segunda máscara coincida con todos los bits restantes ( 0x7fff == (1 << 15) - 1 == 0b0111111111111111 ).

Una vez que tenga el valor sin firmar, es muy fácil convertirlo en firmado.

 if value >= 0x8000: value -= 0x10000 

Esto es para un número de 16 bits. Para un número de 32 bits solo agregue 4 ceros a cada una de las constantes mágicas. Esas constantes también se pueden calcular como 1 << (bits - 1) y 1 << bits .