我们的学校给了我们一个作业,在该作业的某些部分中,我们应该接受一个十六进制的输入,然后将其转换为二进制。但是问题是不允许使用数组。当使用数组存储十六进制字符串时,我可以轻松地将其转换为二进制,但是仍然可以不使用数组来存储它吗?
将以十六进制值输入的输入数据转换为二进制数字流。
您一次只能读取输入的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; }