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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: копирование памяти QBitArray <-> double  (Прочитано 3441 раз)
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

Подскажите в чем проблема? И вообще можно ли применять такое конвертирование?
Записан
BRE
Гость
« Ответ #1 : Ноябрь 29, 2010, 19:57 »

Подскажите в чем проблема?
В незнании C++?

И вообще можно ли применять такое конвертирование?
Не стоит.
Записан
ra6fho
Гость
« Ответ #2 : Ноябрь 29, 2010, 20:08 »

В незнании C++?

Я и не говорил, что я профессионал, ты ведь тоже когда-то учился... Так всё таки что я делаю не так? Не подскажешь?
Записан
BRE
Гость
« Ответ #3 : Ноябрь 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;
}
 
Записан
ra6fho
Гость
« Ответ #4 : Ноябрь 29, 2010, 20:27 »

Спасибо тебе огромное! Исправил, теперь все работает как надо
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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