нужно его перевести в десятичный вид
Подскажите пжлст как это сделать?
Меня больше интересует алгоритм, чем результат.
Заранее благодарен.
От языка больше. Даже где контроллер не умеет аппаратные плавающие запятые, языки высокого уровня позволяют работать с float. На Си это нативно делается, не важно есть FPU или нет. Без FPU просто подключается библиотека программной эмуляции, которая ес-но отжирает место и ресурсы, но позволяет использовать float как родной без проблем.Все зависит от микроконтроллера..
Код: Выделить всё
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);
}