LINUX.ORG.RU

Бинарные файлы


0

0

Привет У меня есть бинарник: test Мне надо найти 21й байт и ,учтя его как 1й найти последний и распознать его значение (543 или 231 например). Вот что понаписал я:

QFile xxx("test"); if (xxx.open(IO_ReadOnly)){ QTextStream stream(&xxx); size_t bytes_read; char buf[100]; while (!stream.eof()) { FILE* fp=fopen("test","rb"); bytes_read = fread(buf, sizeof(buf), 1, fp); char c=fgetc(fp); cout << c; } xxx.close(); } Выдаёт какую-то несуразицу. Подскажите кто что знает. Заранее благодарен.

anonymous

> Выдаёт какую-то несуразицу.

несуразный код (что за страшная помесь Qt и stdio?), несуразная постановка вопроса, вполне ожидаемый результат. Объясните чего хочется

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

Этот код типа читает двоичные файлы и выдаёт "замечательные" буквы типа "ууууууууууууууу". Я хочу прочитать этот файл по байтам(так ведь делается?) Найти 21й байт (расшифровать его) Найти последний байт (и расшифровать его) Вроде так

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

FILE *f = fopen("test", "rb");
char buf;
if (NULL != f) {
  fseek(f, 21, SEEK_SET);
  fread(&c, sizeof(char), 1, f);
  putchar(c);
  fseek(f, 0, SEEK_END);
  fread(&c, sizeof(char), 1, f);
  putchar(c);
  fclose(f);
}

Так?

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

Т.е. он должен записать 21 и посл. байты(вернее их значения) в "char с"? cout << c выдаёт примерно это "@"

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

Если я окрываю свой бинарник vi`ем то на 21е значение какраз приходится символ @. Значит прога тупо записывает 21й символ?

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

Так лучше. Но проблема не в этом. В переменную "c" попажают те значения которые можно увидеть при обычном просмоьре файла(тем же vi), а не раскодированные...

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

Я вообще не бум бум в бинарных файлах. Я считал что в каждом байте заложен какой-то смысл. Например у 21го число 12 (должно быть число, точно знаю) и так далее. Шляпа, да?

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

> Я считал что в каждом байте заложен какой-то смысл. Например у 21го число 12

Конечно в каждом байте есть смысл, но он известен только той программе, которая этот файл написала. Данный байт может представлять 8-битное целое со знаком или без, символ, либо часть объекта бОльшей длины. И вообще, само деление на бинарные и текстовые файлы весьма условно, и там и здесь - биты и байты.

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