texto - fwrite en c
Leer/Escribir en archivos binarios en C (1)
¿Alguien tiene un ejemplo de código que puede escribir en un archivo binario? Y también código que puede leer un archivo binario y enviarlo a la pantalla. En cuanto a los ejemplos, puedo escribir bien en un archivo. Pero cuando trato de leer desde un archivo, no se está produciendo correctamente.
Leer y escribir archivos binarios es prácticamente lo mismo que cualquier otro archivo, la única diferencia es cómo lo abre:
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
Dijiste que puedes leerlo, pero no está emitiendo correctamente ... recuerda que cuando "sacas" estos datos, no estás leyendo ASCII, así que no es como imprimir una cadena en la pantalla:
for(int i = 0; i<10; i++)
printf("%u ", buffer[i]); // prints a series of bytes
Escribir en un archivo es prácticamente lo mismo, con la excepción de que está usando fwrite()
lugar de 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
Ya que estamos hablando de Linux ... hay una manera fácil de hacer un chequeo de cordura. Instale hexdump
en su sistema (si aún no está allí) y vacíe su archivo:
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
...
Ahora compare eso con su resultado:
mike@mike-VirtualBox:~/C$ ./a.out
127 69 76 70 2 1 1 0 0 0
hmm, tal vez cambie el printf
a %x
para aclararlo un poco:
mike@mike-VirtualBox:~/C$ ./a.out
7F 45 4C 46 2 1 1 0 0 0
¡Hey Mira! Los datos coinciden ahora * . ¡Impresionante, debemos leer el archivo binario correctamente!
* Tenga en cuenta que los bytes simplemente se intercambian en la salida, pero que los datos son correctos, se puede ajustar para este tipo de cosas