2017-01-22 3 views
1

64ビットプレーン16進テキストをバイナリに変換しようとしています。以下のコードでは、グローバル変数としてplain_Text64binary_Plain_Text64を割り当てています。しかし、関数hexToBinの実行後、binary_Plain_Text64の値は、与えられた64ビットプレーンテキストの新しいバイナリ値でなければなりません。残念ながら私は他のものを手に入れています。私はhexToBin機能の中にbinary_Plain_Text64という値を表示しており、完璧に動作します。誰でも助けてくれますか?Cのバイナリ変換から16進数への間違った出力を表示

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

int * hexToBin(char plain_Text64[]); 


char plain_Text64[17]={}; 
int binary_Plain_Text64[64]={}; 

int main(){ 
    int *bin; 
    printf("Enter 64bit Plain Text\n"); 
    scanf("%s",plain_Text64); 
    bin=hexToBin(plain_Text64); 
    int i=0; 
    for(i=0;i<64;i++){ 
    //printf("%d\n",*(bin+i)); 
    } 
printf("%d\n",binary_Plain_Text64[0]); 

} 
//Hex Value to Binary 
int * hexToBin(char plain_Text64[]){ 
    int k; 
    int hexDigitToBinary[16][4] = {{0,0,0,0}, {0,0,0,1}, {0,0,1,0}, {0,0,1,1}, {0,1,0,0}, {0,1,0,1}, 
    {0,1,1,0}, {0,1,1,1}, {1,0,0,0}, {1,0,0,1}, {1,0,1,0}, {1,0,1,1}, {1,1,0,0}, {1,1,0,1}, {1,1,1,0}, {1,1,1,1}}; 
    char hexDigits[16] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', 
    '9', 'A', 'B', 'C', 'D', 'E', 'F'}; 
    char hexadecimal[17]={}; 
    int i,j,index=0; 
    strcat(hexadecimal,plain_Text64); 
    for(i=0; i<16; i++){ 
     for(j = 0; j < 16; j++){ 
     //printf("%c\t",hexadecimal[i]); 
     //printf("%c\n",hexDigits[j]); 
      if(hexadecimal[i] == hexDigits[j]){ 
      //printf("OK\n"); 
      for(k=0;k<4;k++){ 
       binary_Plain_Text64[index++]= hexDigitToBinary[j][k]; 
      } 
      } 
     } 
    } 
    return binary_Plain_Text64; 
} 
+0

'plain_Text64 []'に16桁の16進数をすべて格納するには、少なくとも16 + 1(NUL文字列の終わりに対して)==> 'plain_Text64 [17]'を割り当てなければなりません。 'strcat(16進数、plain_Text64);'。 'strcat(hexadecimal、plain_Text64);を' strcpy(hexadecimal、plain_Text64);に置き換えてください。 –

答えて

1

あなたは、このような

int index = 0; 
// ... 
binary_Plain_Text64[index++] = hexDigitToBinary[j][k]; 
として、私はあなたがそれぞれの使用後にインクリメント別のインデックス変数を使用することをお勧め

binary_Plain_Text64[k] = hexDigitToBinary[j][k]; 

にターゲット配列の各時間の同じ4つの要素を上書きします

また、@ J.Piquardによってコメントされているように、文字列ターミネータの余裕がないため、1つの配列の入力が短すぎます

char plain_Text64[16]={}; 

あなたのユーザー入力文字列割り当てでは意味がありませんし、エントリを制限しようとしてください。

+0

ありがとうございました! –

関連する問題