Мне было интересно, есть ли простой и быстрый способ получить десятичное значение гексагона со знаком в python.

Чтобы проверить значение шестнадцатеричного кода, я просто открываю python в терминале и печатаю в шестнадцатеричном коде, он возвращает десятичное число следующим образом:

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

Так что мне было интересно, есть ли способ сделать это для подписанного короткого гексагона? например, 0xfffc должен вернуть -4

1
LeedMx 25 Фев 2018 в 10:56

3 ответа

Лучший ответ

Если вы можете использовать числовые типы NumPy, вы можете использовать преобразование типов 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 определяет единое представление для целых чисел, numbers.Integral класс, подтип numbers.Rational. В Python 3 нет конкретных ограничений на диапазон этого типа. В Python 2 указан только минимальный диапазон, то есть numbers.Integral должен иметь как минимум диапазон от -2147483648 до 2147483647, который соответствует 32-битному представлению.

Реализация NumPy ближе к архитектуре машины. Для эффективной реализации числовых операций он предоставляет типы данных фиксированной ширины, например как int8, int16, int32 и int64.

0
Dmitri Chubarov 25 Фев 2018 в 08:18

Вы можете использовать int classmethod from_bytes и предоставить ему байты:

>>> int.from_bytes(b'\xfc\xff', signed=True, byteorder='little')
-4
2
juanpa.arrivillaga 25 Фев 2018 в 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 Фев 2018 в 08:37