У меня есть массив 10-байтных (80-битных) значений малых чисел Endian (или float80
). Как я могу прочитать эти значения в python 3?Python: чтение значений float80
Пакет struct
не поддерживает float80
(возможно, я читал документы небрежно).
Пакет array
такой же, как упаковка "struct" не поддерживает float80
.
Пакет numpy
поддерживает float128
или float96
. Это очень хорошо, но добавьте \x00
в хвост float80
, чтобы увеличить его до float96
или float128
. Ужасно, импорт этого пакета занимает много времени.
Пакет ctypes
поддерживает c_longdouble
. Это много раз быстрее, чем numpy, но sizeof(c_longdouble)
зависит от машины и может быть меньше 80 бит, добавив \x00
в хвост float80
, чтобы продлить его до c_longdouble
тоже уродливо.
ОБНОВЛЕНИЕ 1: тестовый код на моем gist.github. Функция decode_str64
уродливая, но она работает. Теперь я ищу правильно
Возможно, вы должны изменить формат производителя либо для создания 'float64', либо' float96'/'float128' ... – Bakuriu
@Bakuriu, я бы сделал это, если бы мог :( – kai3341
возможно загрузка как struct" < HQ "и обработки в соответствии с [x86_Extended_Precision_Format] (https://en.wikipedia.org/wiki/Extended_precision#x86_Extended_Precision_Format), возможно, используя [десятичное] (https://docs.python.org/3/library/decimal.html) чтобы не потерять точность – janbrohl