Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Kate от Февраль 03, 2012, 16:02



Название: Чтение бинарного файла
Отправлено: Kate от Февраль 03, 2012, 16:02
Необходимо написать программу,кот открывает двоичный файл,побитно считывает данные и записывает их в массив.Подскажите,как можно реализовать данную задачу?


Код
C++ (Qt)
QString fileName=QFileDialog::getOpenFileName(this, tr("Open File"),
                                                    "C:/ ",
                                                    tr("Files (*.a1311 *.c1211 *.s1311 *.txt)"));
 
QFile file1(fileName);
 
QDataStream in(&file1);
 
QBitArray line(200);
 
if(file1.open(QIODevice::ReadOnly)){
   for(int i = 0; i < 200;i++){
       in >> line[i];
   }
}
file1.close();
 
 


Название: Re: Чтение бинарного файла
Отправлено: popper от Февраль 03, 2012, 21:34
Если нужно именно побитовое чтение, то можно сделать без QDataStream так:

Код:

char c;
if (file.open(...) )
 while (file.getChar(&c))
   writeCharToMyArray(c);



Название: Re: Чтение бинарного файла
Отправлено: Igors от Февраль 04, 2012, 06:38
Проще воспользоваться операторами >> << для QBitArray. Если же файл был создан извне, тогда так

Код
C++ (Qt)
QBitArray ba;
if (file1.open(QIODevice::ReadOnly)){
  qint64 sizeBytes = file1.size();
  if (sizeBytes) {
   char * temp = new char[sizeBytes];
   file1.read(temp, sizeBytes);
   ba.resize(sizeBytes * 8);
   for (int i = 0; i < sizeBytes; ++i)
    for (int j = 0; j < 8; ++j)
     ba.setBit(i * 8 + j, (temp[i] >> j) & 1);
 
   delete [] temp;
  }
  file1.close();
}



Название: Re: Чтение бинарного файла
Отправлено: Kate от Февраль 06, 2012, 20:48
Спасибо огромное,ваш вариант работает!))