Russian Qt Forum
Май 03, 2024, 09:19 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: побайтное представление float  (Прочитано 4956 раз)
demaker
Птица говорун
*****
Offline Offline

Сообщений: 960


Просмотр профиля
« : Декабрь 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-байтное представление???
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #1 : Декабрь 22, 2014, 15:11 »

Почитайте про Big Endian и Little Endian
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #2 : Декабрь 22, 2014, 15:13 »

0x42f6e979, кстати ответ
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #3 : Декабрь 22, 2014, 15:14 »

Конвертер из чисел с плавающими точками в HEX и обратно
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 960


Просмотр профиля
« Ответ #4 : Декабрь 22, 2014, 15:22 »

СПСБ
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #5 : Декабрь 22, 2014, 15:25 »

Да, может будет еще интересно: погуглите IEEE754
Записан
lesav
Частый гость
***
Offline Offline

Сообщений: 235


qnx.org.ru


Просмотр профиля WWW
« Ответ #6 : Январь 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);
   }
}
 
Записан

Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.16 секунд. Запросов: 22.