Does anyone have an example of code that can write to a binary file. And also code that can read a binary file and output to screen. Looking at examples I can write to a file ok But when I try to read from a file it is not outputting correctly.
Reading and writing binary files is pretty much the same as any other file, the only difference is how you open it:
unsigned char buffer; 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
You said you can read it, but it’s not outputting correctly… keep in mind that when you “output” this data, you’re not reading ASCII, so it’s not like printing a string to the screen:
for(int i = 0; i<10; i++) printf("%u ", buffer[i]); // prints a series of bytes
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
Since we’re talking Linux.. there’s an easy way to do a sanity check. Install
hexdump on your system (if it’s not already on there) and dump your file:
[email protected]:~/C$ hexdump test.bin 0000000 457f 464c 0102 0001 0000 0000 0000 0000 0000010 0001 003e 0001 0000 0000 0000 0000 0000 ...
Now compare that to your output:
[email protected]:~/C$ ./a.out 127 69 76 70 2 1 1 0 0 0
hmm, maybe change the
printf to a
%x to make this a little clearer:
[email protected]:~/C$ ./a.out 7F 45 4C 46 2 1 1 0 0 0
Hey, look! The data matches up now*. Awesome, we must be reading the binary file correctly!
*Note the bytes are just swapped on the output but that data is correct, you can adjust for this sort of thing