Ответ Кевина Берка на этот вопрос прекрасно работает, когда ваша двоичная строка представляет собой одно короткое целое число, но если ваша строка содержит двоичные данные, представляющие несколько целых чисел, вам нужно будет добавить дополнительный 'h' для каждого дополнительного целого числа, которое представляет строка.
Для Python 2
Преобразование строки с прямым порядком байтов, представляющей 2 целых числа
import struct
iValues = struct.unpack("<hh", "\x00\x04\x01\x05")
print(iValues)
Вывод: (1024, 1281)
Преобразование строки с прямым порядком байтов, представляющей 3 целых числа
import struct
iValues = struct.unpack("<hhh", "\x00\x04\x01\x05\x03\x04")
print(iValues)
Вывод: (1024, 1281, 1027)
Очевидно, что всегда нереально угадать, сколько символов «h» необходимо, поэтому:
import struct
# A string that holds some unknown quantity of integers in binary form
strBinary_Values = "\x00\x04\x01\x05\x03\x04"
# Calculate the number of integers that are represented by binary string data
iQty_of_Values = len(strBinary_Values)/2
# Produce the string of required "h" values
h = "h" * int(iQty_of_Values)
iValues = struct.unpack("<"+h, strBinary_Values)
print(iValues)
Вывод: (1024, 1281, 1027)
Для Python 3
import struct
# A string that holds some unknown quantity of integers in binary form
strBinary_Values = "\x00\x04\x01\x05\x03\x04"
# Calculate the number of integers that are represented by binary string data
iQty_of_Values = len(strBinary_Values)/2
# Produce the string of required "h" values
h = "h" * int(iQty_of_Values)
iValues = struct.unpack("<"+h, bytes(strBinary_Values, "utf8"))
print(iValues)
Вывод: (1024, 1281, 1027)
person
David M. Helmuth
schedule
26.12.2018