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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QByteArray перевести в float  (Прочитано 4300 раз)
Bolonat
Чайник
*
Offline Offline

Сообщений: 56


Qt Creator 4.5.0 на Qt 5.10.0 (W10 x64) MinGW 5.3.


Просмотр профиля
« : Июнь 07, 2018, 19:31 »

Здравствуйте! Qt Creator 4.5.0 Qt 5.10.0

По модбасу получаю данные, формирую из них массив байт. Из этого массива последовательно выделяю подмассивы и читаю из них значения нужного мне типа, применяя QDataStream.
Не получается из QByteArray получить float.
Делаю следующее:

Код:
   QByteArray ar4=one_ch.mid(64,4);
   float r=0.0;
   QDataStream stream4(ar4);
   //поскольку байты местами менять не нужно, оставляю флаг по умолчанию - QDataStream::BigEndian
    stream4.setFloatingPointPrecision(QDataStream::SinglePrecision);
    stream4>>r;

 Под отладчиком вижу элементы ar4:
 ar4[0]=0x00
 ar4[1]=0x00
 ar4[2]=0x41
 ar4[3]=0x20

Должно получиться 10.0 (По крайней мере, это значение отображается в Modbus Poll), но  получаю всякую чушь.
Что я делаю не так?

Пробую тот же массив считать по-другому:
Код:
    float v=0.0;
    memcpy(&v, ar4.data(), sizeof(float));

или

Код:
    float z = *(reinterpret_cast<const float*>(ar4.constData()));
и тоже в результате получаю ерунду.
« Последнее редактирование: Июнь 07, 2018, 19:49 от Bolonat » Записан
RedDog
Частый гость
***
Offline Offline

Сообщений: 221


Просмотр профиля
« Ответ #1 : Июнь 07, 2018, 20:12 »

первый байт код ф-ции, дальше идут данные
весьма вероятно, во флоат надо укладывать начиная со 2-го (1-го, мыж программисты) байта

Код:
memcpy(&v, ar4.data() + 1, sizeof(float));
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #2 : Июнь 08, 2018, 04:50 »

  //поскольку байты местами менять не нужно, оставляю флаг по умолчанию - QDataStream::BigEndian
Это как раз обмен
Записан
Bolonat
Чайник
*
Offline Offline

Сообщений: 56


Qt Creator 4.5.0 на Qt 5.10.0 (W10 x64) MinGW 5.3.


Просмотр профиля
« Ответ #3 : Июнь 08, 2018, 11:38 »

Спасибо большое. Просто подмассив был выделен неправильно. Надо было сдвижку сделать на два байта:
 QByteArray ar4=one_ch.mid(66,4);

 Тогда:
 ar4[0]=0x41
 ar4[1]=0x20
 ar4[2]=0x00
 ar4[3]=0x00

В результате получаю 10.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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