在 C 中不使用数组存储十六进制字符串
Storing a hexadecimal string without using arrays in C
我们学校给了我们一个作业,在该作业的某些部分,我们应该采用十六进制输入,然后将其转换为二进制。但问题是不允许使用数组。当使用数组存储十六进制字符串时,我可以轻松地将其转换为二进制,但是无论如何都可以不使用数组来存储它吗?
您的任务似乎是:
Convert input data entered as hexadecimal values to a stream of binary digits.
您可以一次读取输入的ne个字节,并将任何十六进制字符转换为相应的二进制数字。
有许多不同的方法可以解决这个问题,这里是一个带有 switch
语句的实现。
#include <stdio.h>
int main() {
int c;
while ((c = getchar()) != EOF) {
switch (c) {
case '0': fputs("0000", stdout); break;
case '1': fputs("0001", stdout); break;
case '2': fputs("0010", stdout); break;
case '3': fputs("0011", stdout); break;
case '4': fputs("0100", stdout); break;
case '5': fputs("0101", stdout); break;
case '6': fputs("0110", stdout); break;
case '7': fputs("0111", stdout); break;
case '8': fputs("1000", stdout); break;
case '9': fputs("1001", stdout); break;
case 'A':
case 'a': fputs("1010", stdout); break;
case 'B':
case 'b': fputs("1011", stdout); break;
case 'C':
case 'c': fputs("1100", stdout); break;
case 'D':
case 'd': fputs("1101", stdout); break;
case 'E':
case 'e': fputs("1110", stdout); break;
case 'F':
case 'f': fputs("1111", stdout); break;
case '\n':
case ' ': putchar(c); break;
default: break;
}
}
return 0;
}
如果您只需要读取编码为十六进制字符串的值并将其存储到变量中,scanf()
是一个简单的解决方案:
#include <stdio.h>
void print_binary(unsigned int x) {
if (x > 1) {
print_binary(x >> 1);
}
putchar('0' + (x & 1));
}
int main(void) {
unsigned int value;
if (scanf("%x", &value) == 1) {
print_binary(value);
putchar('\n');
}
return 0;
}
我们学校给了我们一个作业,在该作业的某些部分,我们应该采用十六进制输入,然后将其转换为二进制。但问题是不允许使用数组。当使用数组存储十六进制字符串时,我可以轻松地将其转换为二进制,但是无论如何都可以不使用数组来存储它吗?
您的任务似乎是:
Convert input data entered as hexadecimal values to a stream of binary digits.
您可以一次读取输入的ne个字节,并将任何十六进制字符转换为相应的二进制数字。
有许多不同的方法可以解决这个问题,这里是一个带有 switch
语句的实现。
#include <stdio.h>
int main() {
int c;
while ((c = getchar()) != EOF) {
switch (c) {
case '0': fputs("0000", stdout); break;
case '1': fputs("0001", stdout); break;
case '2': fputs("0010", stdout); break;
case '3': fputs("0011", stdout); break;
case '4': fputs("0100", stdout); break;
case '5': fputs("0101", stdout); break;
case '6': fputs("0110", stdout); break;
case '7': fputs("0111", stdout); break;
case '8': fputs("1000", stdout); break;
case '9': fputs("1001", stdout); break;
case 'A':
case 'a': fputs("1010", stdout); break;
case 'B':
case 'b': fputs("1011", stdout); break;
case 'C':
case 'c': fputs("1100", stdout); break;
case 'D':
case 'd': fputs("1101", stdout); break;
case 'E':
case 'e': fputs("1110", stdout); break;
case 'F':
case 'f': fputs("1111", stdout); break;
case '\n':
case ' ': putchar(c); break;
default: break;
}
}
return 0;
}
如果您只需要读取编码为十六进制字符串的值并将其存储到变量中,scanf()
是一个简单的解决方案:
#include <stdio.h>
void print_binary(unsigned int x) {
if (x > 1) {
print_binary(x >> 1);
}
putchar('0' + (x & 1));
}
int main(void) {
unsigned int value;
if (scanf("%x", &value) == 1) {
print_binary(value);
putchar('\n');
}
return 0;
}