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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QByteArray rawData to double[]  (Прочитано 5453 раз)
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« : Июнь 02, 2014, 11:29 »

Здравствуйте!
Имеется массив данных QByteArray прочитанных из бинарного файла, который содержит записи значений double.
Мне необходимо вывести эти значения в десятичном виде.
Сейчас я делаю следующее: с помощью data() я получаю указатель на начало массива, прибавляю к нему i * sizeof(double), где i - порядковый номер интересующего меня числа. В переменную double tmp я копирую сырые данные из получившегося указателя memcpy(&tmp, массив->data() + i * sizeof(double), sizeof(double)). Вывожу tmp на экран.
Это работает, но как-то уж больно криво выглядит.
Как было бы наиболее корректно написать?
Записан
OKTA
Гость
« Ответ #1 : Июнь 02, 2014, 11:40 »

Почитай описание вот этой хитрой штуки http://qt-project.org/doc/qt-4.8/qdatastream.html
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #2 : Июнь 02, 2014, 11:51 »

Имеется массив данных QByteArray прочитанных из бинарного файла, который содержит записи значений double.
А кто мешает сразу читать эти double без левого для данного случая QByteArray Непонимающий
Записан

Qt 5.11/4.8.7 (X11/Win)
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #3 : Июнь 02, 2014, 12:02 »

Имеется массив данных QByteArray прочитанных из бинарного файла, который содержит записи значений double.
А кто мешает сразу читать эти double без левого для данного случая QByteArray Непонимающий
Как? Я пробовал получить указатель на элемент, возвращаемый operator[] - не получилось
Записан
xokc
Птица говорун
*****
Offline Offline

Сообщений: 976



Просмотр профиля
« Ответ #4 : Июнь 02, 2014, 12:12 »

Как? Я пробовал получить указатель на элемент, возвращаемый operator[] - не получилось
Как-то так
Код
C++ (Qt)
QVector<double> buf(len);
file.read((char *)buf.data(), len * sizeof(buf[0]));
buf[index] = 5.0;
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #5 : Июнь 02, 2014, 13:36 »

Кажется, понял.
Всё, что мне нужно, это QBuffer. С ним уже можно будет использовать QDataStream.
Спасибо за помощь
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #6 : Июнь 02, 2014, 13:49 »

QDataStream можно использовать и прямо с QFile
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #7 : Июнь 02, 2014, 14:24 »

QDataStream можно использовать и прямо с QFile
Задача стоит такая:
Открыть файл и представлять его как массив double, как массив int, как char и т.д. Не очень подходит такой вариант
Записан
OKTA
Гость
« Ответ #8 : Июнь 02, 2014, 14:53 »

Код:
QFile file("doubleInt.txt");
    if(!file.open(QIODevice::WriteOnly))
        qDebug() << "ERROR";
    QDataStream streamToFile(&file);
    double doubleToFile = 2.6;
    streamToFile << doubleToFile;
    file.close();

    if(!file.open(QIODevice::ReadOnly))
        qDebug() << "ERROR";
    QDataStream streamFromFile(&file);
    double doubleFromFile;
    int intFromFile;
    qint8 charFromFile;

    streamFromFile >> doubleFromFile;
    file.seek(0);
    streamFromFile >> intFromFile;
    file.seek(0);
    streamFromFile >> charFromFile;
    qDebug() << doubleFromFile;
    qDebug() << intFromFile;
    qDebug() << charFromFile;

все достается так, как захочешь..
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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