Как мне записать в файл в двоичном виде в C? - PullRequest
1 голос
/ 03 октября 2010

Почему этот код не работает должным образом?

#include <cstdio>
    int main()
{
char mona[] =       
                   "\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\x00\x01\x90"
                   "\x00\x00\x02\x5d\x01\x03\x00\x00\x00\x26\xef\xb3\x78\x00\x00\x00\x45\x74\x45\x58"
   // <snip>
                   "\x00\x49\x45\x4e\x44\xae\x42\x60\x82";
FILE *fp = fopen("mona.png","wb");
fputs(mona,fp);
fclose(fp);
return 0;
}

Ответы [ 3 ]

13 голосов
/ 03 октября 2010

fputs должен писать строку с нулевым символом в конце.Он остановится после обнаружения '\0'. Вы должны использовать fwrite для записи двоичных данных.

  fwrite(mona, 1, sizeof(mona), fp);
2 голосов
/ 03 октября 2010

Используйте fwrite вместо fputs.

fputs для записи символьных (не двоичных) данных в файлы.

1 голос
/ 05 октября 2010

Вы должны использовать fwrite AND двоичный флаг на fopen, например

fopen("blah.bin","wb");

Если вы не используете «b», все ваши файловые операции будут работать в текстовом режиме (стандарт) также с fwrite.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...