Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Общие вопросы _ Разбор бинарных данных. Получение double

Автор: rcdimon 22.8.2011, 13:44

Всем привет.

Работаю с ГЛОНАСС-приемником по ком-порту. Он шлет бинарные пакеты определенной структуры. Я получаю эти пакеты в массив QByteArray. Я знаю, что, например, байты 4,5,6,7,8,9,10,11 хранят в себе данные типа double. Как мне эти 8 байт преобразовать в обычную double переменную? Потом эту переменную мне нужно будет вывести на экран в формате "31.12347"?
В добавок в документации к глонасс-приемнику видимо забыли указать little-endian или big-endian....


Автор: kuzulis 22.8.2011, 14:03

Цитата
Как мне эти 8 байт преобразовать в обычную double переменную?

QByteArray::toDouble(bool &ok) ?

Цитата
Потом эту переменную мне нужно будет вывести на экран в формате "31.12347"?

QString::number ( double n, char format = 'g', int precision = 6 )

PS: Мы не ассистенточитатели, да? Мы кодописатели?

Автор: rcdimon 22.8.2011, 15:10

QByteArray::toDouble(bool &ok) самоотверженно выдает 0...

Автор: kuzulis 22.8.2011, 15:29

Цитата(rcdimon @ 22.8.2011, 16:10) *
QByteArray::toDouble(bool &ok) самоотверженно выдает 0...

Значит пробовать как то так:
...
double val;
QByteArray ba = <>;

memcpy(&val, ba.constData(), 8);
...


А вообще:
Цитата
Я знаю, что, например, байты 4,5,6,7,8,9,10,11 хранят в себе данные типа double.

надо иметь описание на поля протокола!!!
Разбирайся сам.

Автор: MJIbIu 23.8.2011, 14:03

Цитата(rcdimon @ 22.8.2011, 14:44) *
Всем привет.

Работаю с ГЛОНАСС-приемником по ком-порту. Он шлет бинарные пакеты определенной структуры. Я получаю эти пакеты в массив QByteArray. Я знаю, что, например, байты 4,5,6,7,8,9,10,11 хранят в себе данные типа double. Как мне эти 8 байт преобразовать в обычную double переменную? Потом эту переменную мне нужно будет вывести на экран в формате "31.12347"?
В добавок в документации к глонасс-приемнику видимо забыли указать little-endian или big-endian....

если у тебя именно байты
4, 5, 6, 7, 8, 9, 10, 11
3 1 . 1 2 3 4 7
как вытащить почитай в документации, а вот если они лежат как то по другому тогда и надо искать в протоколе обмена

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)