crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Разбор бинарных данных. Получение double
rcdimon
  опции профиля:
сообщение 22.8.2011, 13:44
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 69
Регистрация: 27.10.2009
Пользователь №: 1183

Спасибо сказали: 1 раз(а)




Репутация:   0  


Всем привет.

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

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuzulis
  опции профиля:
сообщение 22.8.2011, 14:03
Сообщение #2


Активный участник
***

Группа: Участник
Сообщений: 393
Регистрация: 29.6.2009
Пользователь №: 862

Спасибо сказали: 36 раз(а)




Репутация:   7  


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

QByteArray::toDouble(bool &ok) ?

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

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

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


Сообщение отредактировал kuzulis - 22.8.2011, 14:06
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
rcdimon
  опции профиля:
сообщение 22.8.2011, 15:10
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 69
Регистрация: 27.10.2009
Пользователь №: 1183

Спасибо сказали: 1 раз(а)




Репутация:   0  


QByteArray::toDouble(bool &ok) самоотверженно выдает 0...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuzulis
  опции профиля:
сообщение 22.8.2011, 15:29
Сообщение #4


Активный участник
***

Группа: Участник
Сообщений: 393
Регистрация: 29.6.2009
Пользователь №: 862

Спасибо сказали: 36 раз(а)




Репутация:   7  


Цитата(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.

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

Сообщение отредактировал kuzulis - 22.8.2011, 15:32
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
MJIbIu
  опции профиля:
сообщение 23.8.2011, 14:03
Сообщение #5


Студент
*

Группа: Участник
Сообщений: 38
Регистрация: 14.4.2010
Пользователь №: 1630

Спасибо сказали: 3 раз(а)




Репутация:   0  


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

Сообщение отредактировал MJIbIu - 23.8.2011, 14:04
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.3.2024, 17:52