2017-01-22 67 views
1

我想將64位純文本轉換爲二進制文件。您可以在下面的代碼中看到我已將plain_Text64binary_Plain_Text64分配爲全局變量。但在執行函數hexToBin後,binary_Plain_Text64的值應該是給定64位純文本的新二進制值。不幸的是我得到了其他一些。我已經在hexToBin函數本身中打印了binary_Plain_Text64的值,它的工作原理非常完美。誰能幫我?在C顯示錯誤的輸出十六進制到二進制轉換

#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 + 1(對於字符串的NUL結尾)==>'plain_Text64 [17]'否則,您將遇到問題'的strcat(十六進制,plain_Text64);'。請用'strcpy(十六進制,plain_Text64);' –

回答

1

您將要覆蓋每次目標陣列的相同4種元素在

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

我建議使用你每次使用後增加一個單獨的索引變量,如

int index = 0; 
// ... 
binary_Plain_Text64[index++] = hexDigitToBinary[j][k]; 

同樣作爲@ J.Piquard的評論,一個數組對於其輸入來說太短,因爲沒有空間用於字符串終止符

char plain_Text64[16]={}; 

不要指您的用戶輸入字符串分配,並嘗試限制他們的輸入。

+0

替換'strcat(十六進制,plain_Text64);'感謝它的工作! –

相關問題