How can I fix my code? I have a text file with hexadecimal values. Now I need to convert the hexadecimal value to binary and print it. This is my code so far:
#include <stdio.h>
#include <stdlib.h>
#define MAX 1000
int hex_to_binary(char *argv[])
int main(int argc, char *argv[])
{
FILE *file;
file = fopen(argv[1], "r");
char line[100];
while(!feof(file)) {
fgets(line, 100, file);
hex_to_binary(line);
}
fclose(file);
return 0;
}
int hex_to_binary(char *argv[]) {
char binaryNumber[MAX], hexaDecimal[MAX];
long int i = 0;
scanf(“%s”, argv[1]);
printf("\nEquivalent binary value: ");
while(hexaDecimal[i]) {
switch(hexaDecimal[i]) {
case '0': printf("0000"); break;
case '1': printf("0001"); break;
case '2': printf("0010"); break;
case '3': printf("0011"); break;
case '4': printf("0100"); break;
case '5': printf("0101"); break;
case '6': printf("0110"); break;
case '7': printf("0111"); break;
case '8': printf("1000"); break;
case '9': printf("1001"); break;
case 'A': printf("1010"); break;
case 'B': printf("1011"); break;
case 'C': printf("1100"); break;
case 'D': printf("1101"); break;
case 'E': printf("1110"); break;
case 'F': printf("1111"); break;
case 'a': printf("1010"); break;
case 'b': printf("1011"); break;
case 'c': printf("1100"); break;
case 'd': printf("1101"); break;
case 'e': printf("1110"); break;
case 'f': printf("1111"); break;
default: printf("\nInvalid hexadecimal digit %c ", hexaDecimal[i]); return 0;
}
i++;
}
return 0;
}
I keep getting errors such as:
part1_V2.c: In function ‘hex_to_binary’:
part1_V2.c:8: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token
part1_V2.c:22: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token
part1_V2.c:26: error: stray ‘\342’ in program
part1_V2.c:26: error: stray ‘\200’ in program
part1_V2.c:26: error: stray ‘\234’ in program
part1_V2.c:26: error: stray ‘\342’ in program
part1_V2.c:26: error: stray ‘\200’ in program
part1_V2.c:26: error: stray ‘\235’ in program
part1_V2.c:59: error: expected ‘{’ at end of input
I got my code working, but now I'm have trouble with the output:
The textfile I pass to the main function contains:
"1283" (line1) "5105" (next line)
These are the hexadecimal values on the file. So when I run the program I get output:
Equivalent binary value: 0001001010000011
Invalid hexadecimal digit
Invalid hexadecimal digit
Equivalent binary value: 0101000100000101
Why am I getting the invalid hexadecimal digit output? Is it because it is trying to convert "\n" or empty space to binary?
There are some syntax errors in your code. Try this modified code. If you are passing the right parameters to main() then it should work:
#include <stdio.h>
int hex_to_binary(char*);
int main(int argc, char *argv[])
{
FILE *file;
file = fopen(argv[1],"r");
char line[100];
while(!feof(file)){
fgets(line,100,file);
hex_to_binary(line);
}
fclose(file);
getchar();
return 0;
}
int hex_to_binary(char* hex_string)
{
int i=0;
printf("\nEquivalent binary value: ");
while(hex_string[i])
{
switch(hex_string[i])
{
case '0': printf("0000"); break;
case '1': printf("0001"); break;
case '2': printf("0010"); break;
case '3': printf("0011"); break;
case '4': printf("0100"); break;
case '5': printf("0101"); break;
case '6': printf("0110"); break;
case '7': printf("0111"); break;
case '8': printf("1000"); break;
case '9': printf("1001"); break;
case 'A': printf("1010"); break;
case 'B': printf("1011"); break;
case 'C': printf("1100"); break;
case 'D': printf("1101"); break;
case 'E': printf("1110"); break;
case 'F': printf("1111"); break;
case 'a': printf("1010"); break;
case 'b': printf("1011"); break;
case 'c': printf("1100"); break;
case 'd': printf("1101"); break;
case 'e': printf("1110"); break;
case 'f': printf("1111"); break;
default: printf("\nInvalid hexadecimal digit %c ", hex_string[i]);
}
i++;
}
return 0;
}