Чтение и запись двоичных файлов в значительной степени аналогично любому другому файлу, единственное различие заключается в том, как вы его открываете:
unsigned char buffer[10];
FILE *ptr;
ptr = fopen("test.bin","rb"); // r for read, b for binary
fread(buffer,sizeof(buffer),1,ptr); // read 10 bytes to our buffer
Вы сказали, что можете его прочитать, но он не выводится правильно. .. Имейте в виду, что когда вы «выводите» эти данные, вы не читаете ASCII, так что это не похоже на печать строки на экране:
for(int i = 0; i<10; i++)
printf("%u ", buffer[i]); // prints a series of bytes
Запись в файл в значительной степени то же, за исключением того, что вы используете fwrite()
вместо fread()
:
FILE *write_ptr;
write_ptr = fopen("test.bin","wb"); // w for write, b for binary
fwrite(buffer,sizeof(buffer),1,write_ptr); // write 10 bytes from our buffer
Поскольку мы говорящий Linux .. есть простой способ сделать проверку здравомыслия. Установите hexdump
в вашей системе (если он еще не существует) и выгрузите файл:
mike@mike-VirtualBox:~/C$ hexdump test.bin
0000000 457f 464c 0102 0001 0000 0000 0000 0000
0000010 0001 003e 0001 0000 0000 0000 0000 0000
...
Теперь сравните это с вашим выходом:
mike@mike-VirtualBox:~/C$ ./a.out
127 69 76 70 2 1 1 0 0 0
хм, возможно измените printf
на %x
, чтобы сделать это немного яснее:
mike@mike-VirtualBox:~/C$ ./a.out
7F 45 4C 46 2 1 1 0 0 0
Эй, смотрите! Теперь данные совпадают *.
* Обратите внимание, что байты просто заменяются на выходе, но эти данные верны, вы можете настроить этот тип вещей