Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
0 / 0 / 1
Регистрация: 28.01.2015
Сообщений: 2
1

Чтение бинарного файла - чтение первых 9 байт

28.01.2015, 14:45. Просмотров 2504. Ответов 2
Метки нет (Все метки)

Есть код, который читает первые 9 байт бинарного файла(заголовок записи)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void ATS44Encoder::FileEncode()
{
    QFile* file = new QFile("D:\\file.bin");
    file->open(QIODevice::ReadOnly);
    char* buf = new char[9+1];
    file->read(buf, 9);
    QString s ="0x";
    for(int i =0; i <9 ; i++)
    {
        s.append(QString::number(static_cast<unsigned char>(buf[i]),16).toUpper());
    }
    qDebug() << s << endl;
    file->close();
    delete[](buf);
}
Все вроде бы хорошо, но в файле(смотрю far'ом) первые 9 байт выглядят так
846B008C1004108E8E
А в считанном
846B08C104108E8E
Т.е, как я понимаю QString::number(static_cast<unsigned char>(buf[i]),16)
преобразует 0x00 просто в 0.
Подскажите, ЧЯДНТ?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.01.2015, 14:45
Ответы с готовыми решениями:

Чтение бинарного файла
Есть бинарный файл, допустим file.bin, нужно записать его полностью в QByteArry Я пробовал...

Чтение бинарного файла
Всем доброго времени суток. Мне нужно реализовать шифрование файла при помощи RSA. Метод шифрования...

Чтение бинарного файла QDataStream
Столкнулся с такой проблемой, не получается считать файл, не знаю в чем причина, кучу сайтов уже...

Чтение QMap из бинарного файла
Делаю мессенджер, при регистрации записываю логин и пароль пользователя в базу - бинарный файл -...

2
Псевдослучайный
1934 / 1135 / 96
Регистрация: 13.09.2011
Сообщений: 3,204
28.01.2015, 15:27 2
Цитата Сообщение от amdmax Посмотреть сообщение
преобразует 0x00 просто в 0
То есть преобразует нулевое значение в "0", всё в порядке.

Проще всего будет воспользоваться QByteArray и его методом toHex().
1
0 / 0 / 1
Регистрация: 28.01.2015
Сообщений: 2
29.01.2015, 05:51  [ТС] 3
Цитата Сообщение от NoMasters Посмотреть сообщение
Проще всего будет воспользоваться QByteArray и его методом toHex().
Спасибо. Исправил код таким образом
C++
1
2
3
4
5
6
7
8
9
10
11
void ATS44Encoder::FileEncode()
{
    QFile* file = new QFile("D:\\file.bin");
    file->open(QIODevice::ReadOnly);
    char* buf = new char[9];
    file->read(buf, 9);
    QString str = QByteArray::fromRawData(buf,9).toHex();
    delete[](buf);
    qDebug() << str.toUpper() << endl;
    file->close();
}
Теперь все нормально. "Лишние" нули не пропадают )

Подскажите пожалуйста, можно как то вышеприведенный код оптимизировать? Может быть где-то лучше обойтись без указателя или, наоборот, QString использовать как QString*?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.01.2015, 05:51

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Запись и чтение из бинарного файла
Есть программа написанная на языке C++, нужно ее изменить так, чтобы сериализация и десериализация...

Чтение данных из бинарного файла в массив
Доброго всем времени суток. Мне нужно было прочитать из бинарного файла данные в массив int...

Чтение первых символов файла , определение формата
Как прочитать первые символы файла , например 20 , перевести в строку и сравнить с JFIF (допустим...

Чтение файла CSV и чтение из Table View
Здравствуйте, задача считать столбцы и строки excel в TextEdit. Прошу помощи в реализиции. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.