Russian Qt Forum

Qt => Общие вопросы => Тема начата: XVilka от Мая 27, 2010, 05:37



Название: Чтение бинарного байла и вывод его в шестнадцатиричном виде
Отправлено: XVilka от Мая 27, 2010, 05:37
Доброе утро!
на Qt пишу впервые, поэтому прошу не кидать камнями.

задача проста - сделать вывод в одной из вкладок программы "сырого" файла в том виде, как все привыкли видеть в hex-редакторах.
Но у меня получился ужасно медленный и тупой код, да еще и с ошибками работающий...
Подскажите как сделать оптимально (П.С. в программе будут загружаться и большие файлы, как лучше их показывать?)
Спасибо!

Код:
void MainWindow::actionNew(const QString &path) {
    QString fileName = path;
    QString line;
    unsigned int offset = 0, i = 0;
    char *tmp = (char*)malloc(24);

    widget.textRAW->clear();
    widget.textSOURCE->clear();

    if (fileName.isNull())
        fileName = QFileDialog::getOpenFileName(this,
            tr("Open File"), "", "AllFiles (*.*)");

    if (!fileName.isEmpty()) {
        QFile file(fileName);
        if (file.open(QIODevice::ReadOnly)) {
            while (!file.atEnd()) {
                line.sprintf("0x%04x:%04x | ", offset >> 16, offset & 0x0000FFFF);
                widget.textRAW->insertHtml(line);
                file.read(tmp, 24);
                i = 0;
                while (i < 24) {
                  line.sprintf("%x%x ", tmp[i], tmp[i + 1]);
                  widget.textRAW->insertHtml(line);
                  i += 2;
                }
                line.sprintf(" | <br />");
                widget.textRAW->insertHtml(line);
                line.clear();
                offset += 24;
            }
      }
    }

    fileName.clear();
    free(tmp);
}


Название: Re: Чтение бинарного байла и вывод его в шестнадцатиричном виде
Отправлено: SimpleSunny от Мая 27, 2010, 11:41
Показ больших файлов уже обсуждался. http://www.prog.org.ru/topic_11267_0.html


Название: Re: Чтение бинарного байла и вывод его в шестнадцатиричном виде
Отправлено: XVilka от Мая 27, 2010, 17:40
Да, но там ни к какому конкретно решению так и не пришли...