Я бы использовал struct .
import struct
def toU32(bits):
return struct.unpack_from(">I", bits)[0]
def toS32(bits):
return struct.unpack_from(">i", bits)[0]
Строка формата "> I" означает чтение с прямым порядком байтов ">", целое число без знака, "I", избиты строки.Для целых чисел со знаком вы можете использовать "> i".
РЕДАКТИРОВАТЬ
Пришлось посмотреть на другой StackOverflow ответ , чтобы вспомнить, как "конвертировать"целое число со знаком из целого числа без знака в python.Хотя это не столько преобразование, сколько переосмысление битов.
import struct
def toU32(bits):
return ord(bits[0]) << 24 | ord(bits[1]) << 16 | ord(bits[2]) << 8 | ord(bits[3])
def toS32(bits):
candidate = toU32(bits);
if (candidate >> 31): # is the sign bit set?
return (-0x80000000 + (candidate & 0x7fffffff)) # "cast" it to signed
return candidate
for x in range(-5,5):
bits = struct.pack(">i", x)
print toU32(bits)
print toS32(bits)