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