txt texto lenguaje leer guardar fputs ejercicios datos binarios archivos archivo c linux file-io binary

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