Название: QByteArray перевести в float Отправлено: Bolonat от Июнь 07, 2018, 19:31 Здравствуйте! Qt Creator 4.5.0 Qt 5.10.0
По модбасу получаю данные, формирую из них массив байт. Из этого массива последовательно выделяю подмассивы и читаю из них значения нужного мне типа, применяя QDataStream. Не получается из QByteArray получить float. Делаю следующее: Код: QByteArray ar4=one_ch.mid(64,4); Под отладчиком вижу элементы ar4: ar4[0]=0x00 ar4[1]=0x00 ar4[2]=0x41 ar4[3]=0x20 Должно получиться 10.0 (По крайней мере, это значение отображается в Modbus Poll), но получаю всякую чушь. Что я делаю не так? Пробую тот же массив считать по-другому: Код: float v=0.0; или Код: float z = *(reinterpret_cast<const float*>(ar4.constData())); Название: Re: QByteArray перевести в float Отправлено: RedDog от Июнь 07, 2018, 20:12 первый байт код ф-ции, дальше идут данные
весьма вероятно, во флоат надо укладывать начиная со 2-го (1-го, мыж программисты) байта Код: memcpy(&v, ar4.data() + 1, sizeof(float)); Название: Re: QByteArray перевести в float Отправлено: Igors от Июнь 08, 2018, 04:50 //поскольку байты местами менять не нужно, оставляю флаг по умолчанию - QDataStream::BigEndian Это как раз обмен Название: Re: QByteArray перевести в float Отправлено: Bolonat от Июнь 08, 2018, 11:38 Спасибо большое. Просто подмассив был выделен неправильно. Надо было сдвижку сделать на два байта:
QByteArray ar4=one_ch.mid(66,4); Тогда: ar4[0]=0x41 ar4[1]=0x20 ar4[2]=0x00 ar4[3]=0x00 В результате получаю 10. |