2017-01-22 88 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);'感谢它的工作! –