title: C programming: Using fread into char array - get very slightly different values from int array
body: <p>I've started learning C in my course and I'm having some trouble debugging a program I'm making. The program is an emulator for a simplified MIPS language and basically I'm trying to read in a binary file of 32-bit instructions and store it directly into an array so that my program can go through the instructions with a program counter. </p>
  
  <p>Anyway, in my first attempt at the program I had the memory that the file was read into as a 32-bit int array. The emulator worked fine and the results of my emulator matched the expected results. </p>
  
  <p>The specification wanted the emulator to be byte addressable however, so I changed the memory to an array of 1-byte chars. I then changed the rest of the program as appropriate so that it would make sure it read each instruction by taking 4 blocks of chars. </p>
  
  <p>In the int version of my emulator:</p>
  
  <pre><code>int loadBin(char path[]) {
  
  printf("%s\n",path);
  
  //open file
  FILE *fp;
  if ((fp = fopen(path, "rb")) == NULL) {
      perror("Error opening binary file");
      return 1;
  }
  //read from file to memory
  fread(&amp;vm.memory, 4, 16384, fp);
  
  }
  </code></pre>
  
  <p>ANd in the char version:</p>
  
  <pre><code>int loadBin(char path[]) {
  //open file
  FILE *fp;
  if ((fp = fopen(path, "rb")) == NULL) {
  perror("Error opening binary file");
  return 1;
  }
  //read from file to memory
  fread(&amp;vm.memory, 1, 65536, fp);
  fclose(fp);
  
  return 0;
  }
  </code></pre>
  
  <p>But the char memory emulator read an incorrect 32-bit instruction half way through the program. </p>
  
  <p>Using:</p>
  
  <pre><code>int test = (vm.memory[16]) + (vm.memory[17] &lt;&lt; 8) +
  (vm.memory[18] &lt;&lt; 16) + (vm.memory[19] &lt;&lt; 24);
  printf("%d\n", test);
  return 0;
  </code></pre>
  
  <p>results in a DIFFERENT number from what I get in the int array at vm.memory[4] which should be exactly the same. The results up to vm.memory[4] are the same in the char array, but for some reason something goes wrong. Can anybody help?</p>
  
  <p>Thx</p>