簡體   English   中英

C 中的十六進制到二進制轉換顯示錯誤的輸出

[英]Hex to Binary Conversion in C showing wrong output

我正在嘗試將 64 位純十六進制文本轉換為二進制。 您可以在下面的代碼中看到我已將plain_Text64binary_Plain_Text64指定為全局變量。 但功能執行后hexToBin的價值binary_Plain_Text64應該是給定的64位純文本的新的二進制值。 不幸的是我得到了一些其他的。 我已經在hexToBin函數本身中打印了binary_Plain_Text64的值,它工作得很好。 誰能幫我?

#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;
 }

您每次都覆蓋目標數組的相同 4 個元素

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

我建議使用單獨的索引變量,每次使用后都會增加該變量,例如

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

同樣正如@J.Piquard 所評論的,一個數組對於它的輸入來說太短了,因為字符串終止符沒有空間

char plain_Text64[16]={};

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM