cowchin12 - 1 year ago 175
C Question

# Hexadecimal String to Binary String

I'm trying to make a program where the user enters a hexadecimal string ("in format 3ecf, no 0x and no capitals") The code below is my attempt to copy what the user enters (address) and store its binary equivalent in binAddress.

How do I fix this?

Or is there an easier way?

``````char address [6];//global
scanf("%s", address); //in some other function
``````

...

``````void hexToBin(){
int i = 0;
int j = 24;
int z;
char x[4]; //strcpy(char x, "0000")
case '0': strcpy(x, "0000"); break;
case '1': strcpy(x, "0001"); break;
case '2': strcpy(x, "0010"); break;
case '3': strcpy(x, "0011"); break;
case '4': strcpy(x, "0100"); break;
case '5': strcpy(x, "0101"); break;
case '6': strcpy(x, "0110"); break;
case '7': strcpy(x, "0111"); break;
case '8': strcpy(x, "1000"); break;
case '9': strcpy(x, "1001"); break;
case 'a': strcpy(x, "1010"); break;
case 'b': strcpy(x, "1011"); break;
case 'c': strcpy(x, "1100"); break;
case 'd': strcpy(x, "1101"); break;
case 'e': strcpy(x, "1110"); break;
case 'f': strcpy(x, "1111"); break;
default: strcpy(x, "0000"); break;
}
i++;
for (z = 3; z > -1; z--){
j--;
}
}
}
``````

fix like this:

``````#include <stdio.h>
#include <string.h>

void hexToBin(void);

int main(void){

hexToBin();

return 0;
}

void hexToBin(){
int i, j;

for(j = i = 0; address[i]; ++i, j += 4){
case '0': strcpy(binAddress + j, "0000"); break;
case '1': strcpy(binAddress + j, "0001"); break;
case '2': strcpy(binAddress + j, "0010"); break;
case '3': strcpy(binAddress + j, "0011"); break;
case '4': strcpy(binAddress + j, "0100"); break;
case '5': strcpy(binAddress + j, "0101"); break;
case '6': strcpy(binAddress + j, "0110"); break;
case '7': strcpy(binAddress + j, "0111"); break;
case '8': strcpy(binAddress + j, "1000"); break;
case '9': strcpy(binAddress + j, "1001"); break;
case 'a': strcpy(binAddress + j, "1010"); break;
case 'b': strcpy(binAddress + j, "1011"); break;
case 'c': strcpy(binAddress + j, "1100"); break;
case 'd': strcpy(binAddress + j, "1101"); break;
case 'e': strcpy(binAddress + j, "1110"); break;
case 'f': strcpy(binAddress + j, "1111"); break;
default: