2016-07-16 9 views
0

私のプロジェクトでは、16進数の計算機を作成する必要があります。さらに、それをバイナリに変換して表示する必要があります。私は読むことができ進数の最大値は「8」ですが、私は0 Ejとして最初の二進数を満たす必要が8文字未満の16進読めば:ヘックスにCで0の配列を塗りつぶす方法

を:バイナリでADA0CAFE

: 10101101 10100000 11001010 11111110

しかし、私のような六角取得する場合:C45FA

を出力する必要があります:私のコードの00000000 00001100 01000101 11111010

一部は、このような何かを見て:

char hex[100]; 
printf("Hexadecimal: "); 
scanf("%s",hex); 
convert(hex); 

し、それを変換する機能:

void convert(char hex[]){ 
    for(i=0;i<8;i++){ 
    switch(hex[i]){ 
    case '0': printf("0000"); break; 
    case '1': printf("0001"); break; 
    case '2': printf("0010"); break; 
    case '3': printf("0011"); break; 
      . 
      . 
      . 
    } 

だから私は、配列の最初の位置を取得することですどのように把握いけない部分は0で埋め、その後の文字で配列を書き始めますの16進数です。 convert

答えて

2

渡された16進数文字列の長さを見つけ、そしておそらく、このように8に長さを補うために有力0000文字列を出す:

void convert(char hex[]){ 
    size_t len, i; 
    len = strlen(hex); 
    for(i = len; i < 8; i++) { 
     printf("0000");      // pad with leading zeros 
    } 
    for(i = 0; i < len; i++) {    // the rest of the string 
     switch(hex[i]) { 
      case '0': printf("0000"); break; 
      case '1': printf("0001"); break; 
      case '2': printf("0010"); break; 
      case '3': printf("0011"); break; 
      . 
      . 
      . 
     } 
    } 
} 
関連する問題