Binary file being misspelled

Asked

Viewed 59 times

2

Creating the binary file:

#include <stdio.h>

int main(int argc, char const *argv[]) {

  FILE *BIN;
  BIN = fopen ("BIN.bin","wb");

  if (BIN!=NULL)
  {
   for (int i = 1; i <= 100; i++) {
      fwrite( & i,sizeof(i),1,BIN);
    }

    fclose (BIN);
  }
  return 0;
}

Reading the binary file:

#include <stdio.h>

int main(int argc, char const *argv[]) {
char* filename = "BIN.bin";
char x[100];
FILE *fp;
fp = fopen (filename,"rb");

fread(x,sizeof(x),1,fp);


for (size_t i = 0; i <sizeof(x); i++) {
  printf("\n%u",x[i]);
}
fclose (fp);
  return 0;
}

The problem is that the binary contains 3 zeros for each created number, where I went wrong?

Output:

1
0
0
0
2
0
0
0
3
0
0
0
4
0
0
0
5
0
0
0
6
0
0
0
7
0
0
0
8
0
0
0
9
0
0
0
10
0
0
0
11
0
0
0
12
0
0
0
13
0
0
0
14
0
0
0
15
0
0
0
16
0
0
0
17
0
0
0
18
0
0
0
19
0
0
0
20
0
0
0
21
0
0
0
22
0
0
0
23
0
0
0
24
0
0
0
25
0
0
0

1 answer

3


You are recording numbers (i is int) as binary and is reading texts (x is char[]) binary. They are incompatible. You save something with 4 bytes and then have characters read (which is only 1 byte). Then in low numbers so you will have 1 character with a number and 3 zeroes.

C is a weak typing language and allows one data to be read as another.

Generally the use of fprintf() and fscanf() are more suitable to work with binary data like this. Unless you prefer to do all the processing. Of course, it is possible to merge 4 bytes at a time to create an integer.

In any situation a difference of architecture where read and write will give problem, binary can only be used in the same architecture or if you manage these differences at hand.

May be useful: How to convert text to number? and Different views of the same variable in C Language.

#include <stdio.h>

int main(int argc, char const *argv[]) {
    char x[4] = { 0, 127, 0, 0 };
    printf("%u\n", *((unsigned int *)x));
}

Behold working in the ideone. And in the repl it.. Also put on the Github for future reference.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.