Note that there are some explanatory texts on larger screens.

plurals
  1. POC programming: Using fread into char array - get very slightly different values from int array
    primarykey
    data
    text
    <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>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload