Russian Qt Forum

Qt => Вопросы новичков => Тема начата: demaker от Декабрь 22, 2014, 14:57



Название: побайтное представление float
Отправлено: demaker от Декабрь 22, 2014, 14:57
Пытаюсь разобраться
как компилятор представляет float
в памяти.
Беру число 123.456
Код
C++ (Qt)
float value = 123.456;
 
qDebug()<<*(((uchar*)&value) + 0);
qDebug()<<*(((uchar*)&value) + 1);
qDebug()<<*(((uchar*)&value) + 2);
qDebug()<<*(((uchar*)&value) + 3);
 

в дебаге выводится:

Код:
121 233 246 66
или в HEX
0x79 0xE9 0xF6 0x42

но это я как понимаю неверно.
должно быть:

Код:
0xE9 0x79 0x42 0xF6

Т.е получается идет 2-байтное представление???


Название: Re: побайтное представление float
Отправлено: __Heaven__ от Декабрь 22, 2014, 15:11
Почитайте про Big Endian и Little Endian


Название: Re: побайтное представление float
Отправлено: __Heaven__ от Декабрь 22, 2014, 15:13
0x42f6e979, кстати ответ


Название: Re: побайтное представление float
Отправлено: __Heaven__ от Декабрь 22, 2014, 15:14
Конвертер из чисел с плавающими точками в HEX и обратно (http://gregstoll.dyndns.org/~gregstoll/floattohex/)


Название: Re: побайтное представление float
Отправлено: demaker от Декабрь 22, 2014, 15:22
СПСБ


Название: Re: побайтное представление float
Отправлено: __Heaven__ от Декабрь 22, 2014, 15:25
Да, может будет еще интересно: погуглите IEEE754


Название: Re: побайтное представление float
Отправлено: lesav от Январь 16, 2015, 08:22
Оставлю это тут, уверен, что пригодиться.
Код
C++ (Qt)
#include <QtEndian>
 
void appendFloat(QByteArray &ba, float fval, bool swap) const
{
   int typeSize = sizeof (float);
 
   quint32* pUint32tmp = (quint32*) &(fval);
 
   *pUint32tmp = (swap)? qbswap<quint32>(*pUint32tmp) : *pUint32tmp;
 
   for(int i=0; i < typeSize; ++i) {
       quint8 b = (*pUint32tmp >> i*8) & 0xFF;
       ba.append(b);
   }
}