十六进制字符串转二进制字符串
Hexadecimal String to Binary String
我正在尝试制作一个用户输入十六进制字符串的程序 ("in format 3ecf, no 0x and no capitals") 下面的代码是我尝试复制用户输入的内容(地址)并将其二进制等价物存储在 binAddress 中。
我该如何解决这个问题?
或者有更简单的方法吗?
char address [6];//global
char binAddress[24]; //global
scanf("%s", address); //in some other function
...
void hexToBin(){
int i = 0;
int j = 24;
int z;
while(address[i]){
char x[4]; //strcpy(char x, "0000")
switch(address[i]){
case '0': strcpy(x, "0000"); break;
case '1': strcpy(x, "0001"); break;
case '2': strcpy(x, "0010"); break;
case '3': strcpy(x, "0011"); break;
case '4': strcpy(x, "0100"); break;
case '5': strcpy(x, "0101"); break;
case '6': strcpy(x, "0110"); break;
case '7': strcpy(x, "0111"); break;
case '8': strcpy(x, "1000"); break;
case '9': strcpy(x, "1001"); break;
case 'a': strcpy(x, "1010"); break;
case 'b': strcpy(x, "1011"); break;
case 'c': strcpy(x, "1100"); break;
case 'd': strcpy(x, "1101"); break;
case 'e': strcpy(x, "1110"); break;
case 'f': strcpy(x, "1111"); break;
default: strcpy(x, "0000"); break;
}
i++;
for (z = 3; z > -1; z--){
binAddress[j] = x[z];
j--;
printf("%c\n", binAddress[j]);
}
}
}
您不需要将十六进制存储在字符数组中。您可以通过带有说明符 %x
的 scanf 读取它
http://www.cplusplus.com/reference/cstdio/scanf/
然后将其转换为二进制(C字符串形式)
how to print binary number via printf
像这样修复:
#include <stdio.h>
#include <string.h>
char address[6+1]; //+1 for NUL
char binAddress[6*4+1];//+1 for NUL
void hexToBin(void);
int main(void){
scanf("%6s", address);
hexToBin();
printf("%s\n", binAddress);
return 0;
}
void hexToBin(){
int i, j;
for(j = i = 0; address[i]; ++i, j += 4){
switch(address[i]){
case '0': strcpy(binAddress + j, "0000"); break;
case '1': strcpy(binAddress + j, "0001"); break;
case '2': strcpy(binAddress + j, "0010"); break;
case '3': strcpy(binAddress + j, "0011"); break;
case '4': strcpy(binAddress + j, "0100"); break;
case '5': strcpy(binAddress + j, "0101"); break;
case '6': strcpy(binAddress + j, "0110"); break;
case '7': strcpy(binAddress + j, "0111"); break;
case '8': strcpy(binAddress + j, "1000"); break;
case '9': strcpy(binAddress + j, "1001"); break;
case 'a': strcpy(binAddress + j, "1010"); break;
case 'b': strcpy(binAddress + j, "1011"); break;
case 'c': strcpy(binAddress + j, "1100"); break;
case 'd': strcpy(binAddress + j, "1101"); break;
case 'e': strcpy(binAddress + j, "1110"); break;
case 'f': strcpy(binAddress + j, "1111"); break;
default:
printf("invalid character %c\n", address[i]);
strcpy(binAddress + j, "0000"); break;
}
}
}
我正在尝试制作一个用户输入十六进制字符串的程序 ("in format 3ecf, no 0x and no capitals") 下面的代码是我尝试复制用户输入的内容(地址)并将其二进制等价物存储在 binAddress 中。
我该如何解决这个问题?
或者有更简单的方法吗?
char address [6];//global
char binAddress[24]; //global
scanf("%s", address); //in some other function
...
void hexToBin(){
int i = 0;
int j = 24;
int z;
while(address[i]){
char x[4]; //strcpy(char x, "0000")
switch(address[i]){
case '0': strcpy(x, "0000"); break;
case '1': strcpy(x, "0001"); break;
case '2': strcpy(x, "0010"); break;
case '3': strcpy(x, "0011"); break;
case '4': strcpy(x, "0100"); break;
case '5': strcpy(x, "0101"); break;
case '6': strcpy(x, "0110"); break;
case '7': strcpy(x, "0111"); break;
case '8': strcpy(x, "1000"); break;
case '9': strcpy(x, "1001"); break;
case 'a': strcpy(x, "1010"); break;
case 'b': strcpy(x, "1011"); break;
case 'c': strcpy(x, "1100"); break;
case 'd': strcpy(x, "1101"); break;
case 'e': strcpy(x, "1110"); break;
case 'f': strcpy(x, "1111"); break;
default: strcpy(x, "0000"); break;
}
i++;
for (z = 3; z > -1; z--){
binAddress[j] = x[z];
j--;
printf("%c\n", binAddress[j]);
}
}
}
您不需要将十六进制存储在字符数组中。您可以通过带有说明符 %x
的 scanf 读取它
http://www.cplusplus.com/reference/cstdio/scanf/
然后将其转换为二进制(C字符串形式) how to print binary number via printf
像这样修复:
#include <stdio.h>
#include <string.h>
char address[6+1]; //+1 for NUL
char binAddress[6*4+1];//+1 for NUL
void hexToBin(void);
int main(void){
scanf("%6s", address);
hexToBin();
printf("%s\n", binAddress);
return 0;
}
void hexToBin(){
int i, j;
for(j = i = 0; address[i]; ++i, j += 4){
switch(address[i]){
case '0': strcpy(binAddress + j, "0000"); break;
case '1': strcpy(binAddress + j, "0001"); break;
case '2': strcpy(binAddress + j, "0010"); break;
case '3': strcpy(binAddress + j, "0011"); break;
case '4': strcpy(binAddress + j, "0100"); break;
case '5': strcpy(binAddress + j, "0101"); break;
case '6': strcpy(binAddress + j, "0110"); break;
case '7': strcpy(binAddress + j, "0111"); break;
case '8': strcpy(binAddress + j, "1000"); break;
case '9': strcpy(binAddress + j, "1001"); break;
case 'a': strcpy(binAddress + j, "1010"); break;
case 'b': strcpy(binAddress + j, "1011"); break;
case 'c': strcpy(binAddress + j, "1100"); break;
case 'd': strcpy(binAddress + j, "1101"); break;
case 'e': strcpy(binAddress + j, "1110"); break;
case 'f': strcpy(binAddress + j, "1111"); break;
default:
printf("invalid character %c\n", address[i]);
strcpy(binAddress + j, "0000"); break;
}
}
}