2016-11-09 218 views
0

我想做一個程序,用戶輸入一個十六進制字符串(「格式3ecf,沒有0x和沒有首都」)下面的代碼是我試圖複製用戶輸入(地址)並將其二進制等價物存儲在binAddress中。十六進制字符串到二進制字符串

我該如何解決這個問題?
或者有更簡單的方法嗎?

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

...

void hexToBin(){ 
int i = 0; 
int j = 24; 
int z; 
while(address[i]){ 
    char x[4]; //strcpy(char x, "0000") 
    switch(address[i]){ 
     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--){ 
     binAddress[j] = x[z]; 
     j--; 
     printf("%c\n", binAddress[j]); 
    } 
} 
} 
+0

閱讀[問],提供一個[mcve]。代碼不完整。 – Olaf

+0

'char x [4];' - >'char x [5];' – BLUEPIXY

回答

1

修復這樣的:

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

char address[6+1]; //+1 for NUL 
char binAddress[6*4+1];//+1 for NUL 
void hexToBin(void); 

int main(void){ 
    scanf("%6s", address); 

    hexToBin(); 

    printf("%s\n", binAddress); 
    return 0; 
} 

void hexToBin(){ 
    int i, j; 

    for(j = i = 0; address[i]; ++i, j += 4){ 
     switch(address[i]){ 
     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: 
      printf("invalid character %c\n", address[i]); 
      strcpy(binAddress + j, "0000"); break; 
     } 
    } 
} 
0

你並不需要保存的十六進制字符數組。您可以通過與符%scanf函數讀取它X
http://www.cplusplus.com/reference/cstdio/scanf/

然後將其轉換爲二進制(C-字符串形式) how to print binary number via printf

+0

是否必須將地址更改爲int類型? – cowchin12

+0

是的。但是我建議使用unsigned long(爲了確保它是32位整數,int是平臺相關的大小),當將其轉換爲二進制使用&1u時,有符號位可能會造成麻煩。 –

相關問題