2015-10-26 3 views
-2

У меня есть приложение JavaScript, которое получает значение напряжения как Uint8Array. Вот 2 примера полученных данных:Преобразование массива байтов в float32

[3, 134, 46, 177, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 
[3, 127, 46, 170, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 

Я пытаюсь преобразовать этот Uint8Array в значение с плавающей точкой, но я не уверен, если это float32 или float64, если он подписан или нет. Я знаю, что это значение около 12.

Может ли кто-нибудь помочь с фрагментом JavaScript для преобразования?

Заранее спасибо.

+0

Каков ожидаемый результат, необходимый для ввода, который вы указали? –

+0

Похож на 20 байт для меня, что было бы не 'float32', а' float64'? – arcyqwerty

+0

Принимая первые 8 байт, вы получаете либо 2.843474359893e-312, либо 4.021529366771898e-87 (маленький конец или большой конец), поэтому я думаю, что некоторая информация отсутствует. Если вы не знаете точного значения записей: какая машина/датчик/библиотека дает вам эти значения? – deamentiaemundi

ответ

2

В каждой строке имеется два напряжения. Напряжения от устройств обычно поступают от преобразователей ATOD, которые имеют от 8 до 16 бит информации и масштабируются на основе схемы.

Он выглядит как 3 (неиспользуемый и, вероятно, какой-то флаг режима), за которым следуют две пары байтов, каждая из которых имеет напряжение от ATOD. Я бы предположил, что два байта, такие как 177 и 46, должны интерпретироваться как (177 + 46 * 256) /1000.0 на основе 1 мв. масштабирование. Это дает значения чуть более 11,9 вольт. Учитывая диапазон двух образцов, это соответствовало бы вашим ожиданиям.

+0

Спасибо, конвертация с использованием вашего метода работает. –

Смежные вопросы