Автор: 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
как вытащить почитай в документации, а вот если они лежат как то по другому тогда и надо искать в протоколе обмена