Я пытаюсь преобразовать массив c_byte в разные типы данных в Python, например, преобразование массива c_byte из восьми записей в int64 или double.
В моем проекте я прочитал длинный массив c_byte (n> 500), содержащий несколько значений датчиков с разными типами данных. Так что, возможно, первая запись - это bool, вторая и третья запись представляют собой int8, а записи 4-11 хранят двойное число. Я ищу удобный способ приведения этих записей массива в требуемые типы данных.
В данный момент я переписываю байтовый массив в строки, содержащие двоичное число. Я думал о ручном написании функций для преобразования этих строк в числа с плавающей точкой и целые числа, но я надеюсь, что есть более элегантный способ сделать это. Кроме того, я сталкиваюсь с проблемами при конвертации подписанных целых ...
def convert_byte_to_binary(array):
binary = ''
for i in array:
binary += format(i, '#010b')[2:]
return binary
def convert_binary_to_uint(binary):
return int(binary, 2)
array = read_cbyte_array(address, length) # reads an array of size length, starting at address
array
[15, 30, 110, 7, 65]
convert_byte_to_binary(array)
'0000111100011110011011100000011101000001'
Я нашел библиотеку цепочек битов, которая делает нечто очень похожее на то, что я хочу. К сожалению, я не нашел поддержки для 64-битных целых или двойных чисел.
В идеале, у меня был бы набор функций, которые могут преобразовывать массив ctypes.c_byte в соответствующие типы ctypes.