I\'m writing a program that reads a file and generates an array of integers of each byte, first I prove with a .txt file and I generates the ASCII for each of the letters an
The problem is because of use of fputc. It always prints a character, so value of rest[x] is converted into a character and then written to the file. That is why you are seeing all garbage in file.
Replace below:
fprintf(fp,"%i", rest[x]); // %i here would print the expected value
//fputc(rest[x], fp);
Also, close should be out of loop.
One more thing to notice is, as you are reading character by character till end of file, it would convert ending "\n" and "\r" characters also.
Below is the working program:
#include
int main() {
int b1, b2, b3, b4, b5, b6, b7, b8;
int x, i;
char a;
FILE *f1, *fp;
b1 = 0x01; // = 0000 0001
b2 = 0x02; // = 0000 0010
b3 = 0x04; // = 0000 0100
b4 = 0x08; // = 0000 1000
b5 = 0x10; // = 0001 0000
b6 = 0x20; // = 0010 0000
b7 = 0x40; // = 0100 0000
b8 = 0x80; // = 1000 0000
int mask[8] = { b8, b7, b6, b5, b4, b3, b2, b1 };
int rest[8];
f1 = fopen("UAM.txt", "rb");
fp = fopen("file.txt", "w+");
while (!feof(f1))
{
a = getc(f1);
printf("%d\n", a);
for (i = 0; i <= 7; i++)
{
rest[i] = a & mask[i];
}
for (i = 0; i <= 7; i++)
{
rest[i] = rest[i] / mask[i];
}
for (x = 0; x <= 7; x++)
{
printf("%i", rest[x]);
fprintf(fp,"%i", rest[x]);
//fputc(rest[x], fp);
}
fprintf(fp,"\n");
printf("\n");
}
fclose(f1);
fclose(fp);
return 0;
}