Russian Qt Forum

Qt => Общие вопросы => Тема начата: ra6fho от Ноябрь 29, 2010, 19:52



Название: копирование памяти QBitArray <-> double
Отправлено: ra6fho от Ноябрь 29, 2010, 19:52
Есть 2 функции для копирования памяти из QBitArray в double и обратно.

Код:
double bitsToDouble(QBitArray &arr) {
    void *value;
    qMemCopy(value,arr.data_ptr()->data+1,sizeof(double));
    double ret = (*(double*)value);
    return ret;
}


QBitArray doubleToBits(const double &val) {
    QBitArray r(sizeof(val)*8);
    qMemCopy(r.data_ptr()->data+1, &val, sizeof(val));
    return (r);
}

Пример использования:

Код:
int main() {
    double ch1 = 5.55;
    double ch2 = 3.35;

    QBitArray ba1;
    ba1 = doubleToBits(ch1);
    qDebug()<<ba1[0];

    QBitArray ba2;
    ba2 = doubleToBits(ch2);
    qDebug()<<ba2[0];

    double cch1 = bitsToDouble(ba1);
    double cch2 = bitsToDouble(ba2);

    qDebug()<<cch1;
    qDebug()<<cch2;

    return 0;
}

В таком виде все работает, но как только убираю qDebug() напрочь отказывается работать.
Код:
Запускается /home/anton/GA-build-desktop/GA...
Программа неожиданно завершилась.
/home/anton/GA-build-desktop/GA завершился с кодом 0

Подскажите в чем проблема? И вообще можно ли применять такое конвертирование?


Название: Re: копирование памяти QBitArray <-> double
Отправлено: BRE от Ноябрь 29, 2010, 19:57
Подскажите в чем проблема?
В незнании C++?

И вообще можно ли применять такое конвертирование?
Не стоит.


Название: Re: копирование памяти QBitArray <-> double
Отправлено: ra6fho от Ноябрь 29, 2010, 20:08
В незнании C++?

Я и не говорил, что я профессионал, ты ведь тоже когда-то учился... Так всё таки что я делаю не так? Не подскажешь?


Название: Re: копирование памяти QBitArray <-> double
Отправлено: BRE от Ноябрь 29, 2010, 20:14
Я и не говорил, что я профессионал, ты ведь тоже когда-то учился... Так всё таки что я делаю не так? Не подскажешь?
А я и не пытался тебя обидеть. Ты спросил в чем проблема - проблема в этом. Я понимаю, что с получением опыта таких ошибок не будет. ;)

Код
C++ (Qt)
double bitsToDouble(QBitArray &arr) {
   void *value; // <<<< Куда указывает этот указатель?
   qMemCopy(value,arr.data_ptr()->data+1,sizeof(double)); // Что это за метод data_ptr?
// Не документированный, для чего используешь?
// А если в следующей версии Qt его не будет?
   double ret = (*(double*)value);
   return ret;
}
 


Название: Re: копирование памяти QBitArray <-> double
Отправлено: ra6fho от Ноябрь 29, 2010, 20:27
Спасибо тебе огромное! Исправил, теперь все работает как надо