HEX float to DEC

Здесь принимаются все самые невообразимые вопросы... Главное - не стесняйтесь. Поверьте, у нас поначалу вопросы были еще глупее :)
Ответить
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2309
Зарегистрирован: Пт июл 17, 2009 07:34:07
Откуда: Свердловская обл.

Сообщение uwrtey »

Есть число float ( например 040C2240 )
нужно его перевести в десятичный вид
Подскажите пжлст как это сделать?

Меня больше интересует алгоритм, чем результат.
Заранее благодарен.
не зная броду не лезь к вольтмоду
Реклама
Поставщик валерьянки для Кота
Сообщения: 1978
Зарегистрирован: Ср июл 17, 2013 13:55:57

Сообщение NStorm »

Допустим речь у вас о IEEE 754. Прежде чем лезть в алгоритмы, нужно прочитать краткую теорию: https://ru.wikipedia.org/wiki/%D0%A7%D0 ... 1%82%D0%B8

Там и примеры есть. А алгоритм будет от языка зависеть, но для питона скажем там есть пример, можно по нему прикинуть так сказать.

Есть наглядный калькулятор онлайн: https://www.h-schmidt.net/FloatConverter/IEEE754.html
В последнее поле вводите ваше 0x040c2240 и видите раскладку вашего числа и его десятичное представление.
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2896
Зарегистрирован: Сб ноя 13, 2010 12:53:25
Откуда: приходит весна?

Сообщение B@R5uk »

[uquote="uwrtey",url="/forum/viewtopic.php?p=3957739#p3957739"]Меня больше интересует алгоритм, чем результат.[/uquote] А чем в алгоритме можно пользоваться? Плавающей арифметикой можно? Если да, то метод умножения на 10 должен помочь. Весьма простой алгоритм для начала.
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2309
Зарегистрирован: Пт июл 17, 2009 07:34:07
Откуда: Свердловская обл.

Сообщение uwrtey »

[uquote="NStorm",url="/forum/viewtopic.php?p=3957774#p3957774"]Допустим речь у вас о IEEE 754. Прежде чем лезть в алгоритмы, нужно прочитать краткую теорию: https://ru.wikipedia.org/wiki/%D0%A7%D0 ... 1%82%D0%B8[/uquote]
Спасибо :beer:
Мне нужно было понять, каким стандартом нужно пользоваться... Раньше не сталкивался..
Возьму на вооружение IEEE754.

[uquote="NStorm",url="/forum/viewtopic.php?p=3957774#p3957774"]Там и примеры есть. А алгоритм будет от языка зависеть, но для питона скажем там есть пример, можно по нему прикинуть так сказать.[/uquote]
Ну я пока на бумажке считаю. Писать буду на асме, скорей всего....
Все зависит от микроконтроллера.. На stm32f407 можно и аппаратно этим заниматься. Вот: http://stm32asm.ru/407/f407_fpu.html

[uquote="NStorm",url="/forum/viewtopic.php?p=3957774#p3957774"]Есть наглядный калькулятор онлайн: https://www.h-schmidt.net/FloatConverter/IEEE754.html
В последнее поле вводите ваше 0x040c2240 и видите раскладку вашего числа и его десятичное представление.[/uquote]
Да их много. Я его видел, но что то не разобрался с ним...
Спасибо, объяснили.. :beer:
Я другим воспользовался - более понятным: http://floatingpoint.ru/online/float2dec.php


[uquote="B@R5uk",url="/forum/viewtopic.php?p=3957933#p3957933"]А чем в алгоритме можно пользоваться? Плавающей арифметикой можно?
Если да, то метод умножения на 10 должен помочь. Весьма простой алгоритм для начала.[/uquote]
Спасибо, вопрос больше имел теоретический характер, чем практический.
Вот тут то что нужно мне было.. https://ru.wikipedia.org/wiki/%D0%A7%D0 ... 1%82%D0%B8

В коде пока не думал как это сделать - рановато.
Нужно понять, те ли данные я вырвал из потока. :shock:
// Читаю поток данных. Выдергиваю, интересующие меня, пакеты. В этих пакетах несколько параметров... Возможно это совсем не те пакеты, так как расшифрованные параметры отличаются от истины...
не зная броду не лезь к вольтмоду
Реклама
Эиком - электронные компоненты и радиодетали
Поставщик валерьянки для Кота
Сообщения: 1978
Зарегистрирован: Ср июл 17, 2013 13:55:57

Сообщение NStorm »

Все зависит от микроконтроллера..
От языка больше. Даже где контроллер не умеет аппаратные плавающие запятые, языки высокого уровня позволяют работать с float. На Си это нативно делается, не важно есть FPU или нет. Без FPU просто подключается библиотека программной эмуляции, которая ес-но отжирает место и ресурсы, но позволяет использовать float как родной без проблем.
Реклама
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 352
Зарегистрирован: Ср дек 30, 2020 23:05:29

Сообщение ddr4 »

возможно Вам требуются следующие операции:

packFloat() - пакуем float в 4 байта.
unpackFloat() - распаковываем float из 4 байтов.

Код: Выделить всё

void packFloat(void *buf, float x) {
    unsigned char *b = (unsigned char *)buf;
    unsigned char *p = (unsigned char *) &x;
#if defined (_M_IX86) || (defined (CPU_FAMILY) && (CPU_FAMILY == I80X86))
    b[0] = p[3];
    b[1] = p[2];
    b[2] = p[1];
    b[3] = p[0];
#else
    b[0] = p[0];
    b[1] = p[1];
    b[2] = p[2];
    b[3] = p[3];
#endif
}

Код: Выделить всё

float unpackFloat(const void *buf) {
    const unsigned char *b = (const unsigned char *)buf;
    uint32_t temp = 0;
    temp = ((b[0] << 24) |
            (b[1] << 16) |
            (b[2] <<  8) |
             b[3]);
    return *((float *) &temp);
}
Взято отсюда (и немного изменено):
https://stackoverflow.com/questions/399 ... site-bytes
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2309
Зарегистрирован: Пт июл 17, 2009 07:34:07
Откуда: Свердловская обл.

Сообщение uwrtey »

Немного покопавшись выяснил, что нужный результат дает следующий калькулятор:
https://www.scadacore.com/tools/program ... -converter
например float BD10F575 = (-0.0353903361)
Видимо нужна реализация Float - Big Endian (ABCD)
Остальные калькуляторы нужного результата не давали.

Буду признателен, если научите рассчитывать данный результат на бумажке.
( конструкции на высоко-уровневых языках прошу не предлагать. хочу понять как реализовать математику.)
Хочу подпрограмму данного расчета организовать на ассемблере AVR.

В двойне буду признателен, если у кого есть готовая реализация. :beer:
не зная броду не лезь к вольтмоду
Друг Кота
Аватара пользователя
Сообщения: 3793
Зарегистрирован: Ср дек 24, 2008 09:58:58

Сообщение Ser60 »

Может эта статья будет полезна в плане алгоритмов.
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2309
Зарегистрирован: Пт июл 17, 2009 07:34:07
Откуда: Свердловская обл.

Сообщение uwrtey »

Разобрался.
Ровно как в вики описано: https://ru.wikipedia.org/wiki/%D0%A7%D0 ... 1%82%D0%B8
Теперь на бумажке считать умею..
Осталось в коде реализовать.
не зная броду не лезь к вольтмоду
Поставщик валерьянки для Кота
Сообщения: 1978
Зарегистрирован: Ср июл 17, 2013 13:55:57

Сообщение NStorm »

uwrtey, а почему вы решили, что калькулятор врет? Я бегло смотрел, вроде всё правильно показывал.
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2309
Зарегистрирован: Пт июл 17, 2009 07:34:07
Откуда: Свердловская обл.

Сообщение uwrtey »

Странно. Сейчас проверил и вправду нормальный калькулятор.. Прошу прощения - наговариваю на него..
Видимо я где то затупил...
не зная броду не лезь к вольтмоду
Ответить

Вернуться в «Теория»