2017-01-22 3 views
1

64 비트 일반 16 진수 텍스트를 2 진수로 변환하려고합니다. 아래 코드에서 plain_Text64binary_Plain_Text64을 전역 변수로 지정했습니다. 그러나 함수 hexToBin의 실행 후 binary_Plain_Text64 값은 주어진 64 비트 일반 텍스트의 새로운 2 진 값이어야합니다. 불행히도 나는 다른 것을 얻고있다. 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 진수를 모두 저장하려면 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]; 
같이, I는 사용 후 증가 별도의 인덱스 변수를 이용하여 제안

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

타겟 어레이마다 동일한 4 개 요소를 덮어 쓰는

또한 @ J.Piquard에 의해 주석 처리 된 것과 같이, 문자열 터미네이터를위한 공간이 없으므로 하나의 배열은 입력에 너무 짧습니다.

char plain_Text64[16]={}; 

사용자 입력 문자열 할당을 의미하지 말고 항목을 제한하십시오.

+0

고마워요! –

관련 문제