[英]Hex to Binary Conversion in C showing wrong output
我正在嘗試將 64 位純十六進制文本轉換為二進制。 您可以在下面的代碼中看到我已將plain_Text64
和binary_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.