Используйте объединение:
import ctypes as ct
class Convert(ct.Union):
_fields_ = (("my_bytes", ct.c_char * ct.sizeof(ct.c_float)),
("my_float", ct.c_float))
data_to_convert = b'\xd8\x0fI@'
conv = Convert()
conv.my_bytes = data_to_convert
print(conv.my_float) # prints 3.141592025756836
Вероятно, вы также захотите проверить длину перед преобразованием. Без такой проверки вы получите ValueError
, если попытаетесь использовать слишком длинный последовательность байтов, но он не предупредит вас, если вы используете слишком короткий . (Проверка типа выполняется за вас автоматически.)
if len(data_to_convert) != len(conv.my_bytes):
raise ValueError