Russian Qt Forum

Qt => Общие вопросы => Тема начата: __Heaven__ от Июнь 02, 2014, 11:29



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


Название: Re: QByteArray rawData to double[]
Отправлено: OKTA от Июнь 02, 2014, 11:40
Почитай описание вот этой хитрой штуки http://qt-project.org/doc/qt-4.8/qdatastream.html


Название: Re: QByteArray rawData to double[]
Отправлено: GreatSnake от Июнь 02, 2014, 11:51
Имеется массив данных QByteArray прочитанных из бинарного файла, который содержит записи значений double.
А кто мешает сразу читать эти double без левого для данного случая QByteArray ???


Название: Re: QByteArray rawData to double[]
Отправлено: __Heaven__ от Июнь 02, 2014, 12:02
Имеется массив данных QByteArray прочитанных из бинарного файла, который содержит записи значений double.
А кто мешает сразу читать эти double без левого для данного случая QByteArray ???
Как? Я пробовал получить указатель на элемент, возвращаемый operator[] - не получилось


Название: Re: QByteArray rawData to double[]
Отправлено: xokc от Июнь 02, 2014, 12:12
Как? Я пробовал получить указатель на элемент, возвращаемый operator[] - не получилось
Как-то так
Код
C++ (Qt)
QVector<double> buf(len);
file.read((char *)buf.data(), len * sizeof(buf[0]));
buf[index] = 5.0;


Название: Re: QByteArray rawData to double[]
Отправлено: __Heaven__ от Июнь 02, 2014, 13:36
Кажется, понял.
Всё, что мне нужно, это QBuffer. С ним уже можно будет использовать QDataStream.
Спасибо за помощь


Название: Re: QByteArray rawData to double[]
Отправлено: kambala от Июнь 02, 2014, 13:49
QDataStream можно использовать и прямо с QFile


Название: Re: QByteArray rawData to double[]
Отправлено: __Heaven__ от Июнь 02, 2014, 14:24
QDataStream можно использовать и прямо с QFile
Задача стоит такая:
Открыть файл и представлять его как массив double, как массив int, как char и т.д. Не очень подходит такой вариант


Название: Re: QByteArray rawData to double[]
Отправлено: OKTA от Июнь 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;

все достается так, как захочешь..