fwrite () c функция записи дополнительных байтов - PullRequest
0 голосов
/ 08 мая 2020

Я использую eclipse для c (версия: 2020-03 (4.15.0) Build id: 20200313-1211) и MinGW (версия 0.6.3-pre-20170905-1).

Я играл с fwrite() в течение последних нескольких недель, в основном создавая файлы BMP, без каких-либо странных проблем.

Сейчас происходит что-то действительно странное, чего я совсем не понимаю: полученный файл имеет 2 лишние байты и, следовательно, изображение повреждено и не может быть отображено.

  • Я прочитал значение, которое возвращает fwrite() и оно равно размеру, предназначенному для записи (384 в обоих случаях)
  • Я проверил данные указателя на fwrite() и внутреннего (FILE*)->_base, и оба указывают на адрес с правильным содержимым, но отличается от того, что имеет сгенерированный файл.

И при удалении этих 2 байтов изображение отлично читается (я использую программное обеспечение HxD).

Это сгенерированный файл, 2 байта - это 0D перед двумя 0A 00 00 00 (которые ширина и высота) - это дополнительные байты t что я понятия не имею, откуда они берутся, и поскольку где расположены, они компенсируют всю остальную информацию заголовка BMP и повреждают изображение!

Содержимое поврежденного файла BMP

В BMP нет ничего особенного, просто квадрат 10x10 пикселей с градиентом оттенков серого.

Заранее спасибо!

1 Ответ

0 голосов
/ 08 мая 2020

Вау, спасибо всем за быстрые ответы!

Действительно, проблема \n преобразована в проблему \r\n. Создание двоичного файла (fopen(<>,"wb")) решило проблему!

Спасибо, tkausl и Johnny Mopp! Спасибо всем, вы замечательные люди!

...