Search code examples
ccompiler-errorsbinaryhex

How to convert a hexadecimal value to a binary value in C


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?


Solution

  • 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;
    }