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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Чтение бинарного файла  (Прочитано 5674 раз)
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();
 
 
« Последнее редактирование: Февраль 06, 2012, 09:25 от Пантер » Записан
popper
Гость
« Ответ #1 : Февраль 03, 2012, 21:34 »

Если нужно именно побитовое чтение, то можно сделать без QDataStream так:

Код:

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

Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #2 : Февраль 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();
}

« Последнее редактирование: Февраль 04, 2012, 06:42 от Igors » Записан
Kate
Гость
« Ответ #3 : Февраль 06, 2012, 20:48 »

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


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