LINUX.ORG.RU

QTIODevice + «/dev/urandom»


0

0

Помогите прочитать числа из /dev/urandom, вот что я делаю: char y; QFile file("/dev/urandom"); if(!file.open(QIODevice::ReadOnly)){ qDebug() << "Openning failed."; return; } *** if(file.read(&y, ??)){ //?? - (typedef qint64) в С я б написал sizeof() qDebug() << "Readding failed."; return; } *** file.close(); } что мне подставить вместо ?? и как мне читать если сделать unsigned long y;

З.Ы. Может я чето непонятно написал - в результате я хочу получить беззнаковое 8ми (5и) байтовое (псевдо)случайное число.

Попробуй так:

#include <QFile>
#include <QDataStream>

QFile file("/dev/urandom");

if (file.open())
{
   QDataStream randomStream(&file);
   unsigned long randomValue;
   randomStream >> randomValue;
}
Devix
()

Попробуй так:

#include <QFile>
#include <QDataStream>

QFile file("/dev/urandom");

if (file.open(QIODevice::ReadOnly))
{
   QDataStream randomStream(&file);
   unsigned long randomValue;
   randomStream >> randomValue;
}
Devix
()
Ответ на: комментарий от Devix

Выдало: mainwindow.cpp:60: ошибка: no match for ‘operator>>’ in ‘randomStream >> randomValue’ и еще кучу всяких инклюдов :( что означает randomStream >> randomValue?

werwolf
() автор топика
Ответ на: комментарий от werwolf

no match for ‘operator>>’ in ‘randomStream >> randomValue’

Говорит что оператор >> не перегружен для типа unsigned long. Вместо этого можно использовать quin64 (8 - байтовое целый тип).

#include <QFile>
#include <QDataStream>

QFile file("/dev/urandom");

if (file.open(QIODevice::ReadOnly))
{
   QDataStream randomStream(&file);
   quint64 randomValue;
   randomStream >> randomValue;
}

что означает randomStream >> randomValue?

Запись данных в randomValue из потока randomStream.

PS: Про потоки почитай(пример: std::cout и std::cin).

Devix
()
Ответ на: комментарий от Devix

не работает, работает только в случае quint8 randomValue;
а как получить хотябы quint32 randomValue ?
считается все в цикле
QSqlQuery query;
QFile file("/dev/urandom");
QDataStream randomStream(&file);
quint8 randomValue;

if(file.open(QIODevice::ReadOnly)){
for(int i=0;i<10;++i){
randomStream >> randomValue;
query.prepare("INSERT INTO plot_val (id, x, y)"
"VALUES(:id, :x, :y)");
query.bindValue(":id", 1);
query.bindValue(":x", 1);
query.bindValue(":y", randomValue);
query.exec();
//randomStream.
qDebug()<<"New x="<<1<<"y="<<randomValue<<".";
}
}else{
qDebug()<<"File openning failed.";
return;
}
file.close();

werwolf
() автор топика
Ответ на: комментарий от werwolf
#include <QtCore>

int main(int argc, char *argv[])
{
    QCoreApplication app(argc, argv);

    QFile file("/dev/urandom");

    if(!file.open(QIODevice::ReadOnly))
    {
        qCritical("Cannot open /dev/urandom");
        return 1;
    }

    quint32 i;

    for(int k = 0;k < 10;++k)
    {
        if(file.read((char *)&i, sizeof(i)) != sizeof(i))
        {
            qDebug("Cannot read 32-bit value");
            return 1;
        }

        qDebug() << i;
    }

    return 0;
}
alex_custov ★★★★★
()
Ответ на: комментарий от werwolf

Только что проверил все прекрасно работает.

Devix
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.