存储十六进制字符串而不在C中使用数组

问题描述 投票:0回答:1

我们的学校给了我们一个作业,在该作业的某些部分中,我们应该接受一个十六进制的输入,然后将其转换为二进制。但是问题是不允许使用数组。当使用数组存储十六进制字符串时,我可以轻松地将其转换为二进制,但是仍然可以不使用数组来存储它吗?

c string hex
1个回答
1
投票

将以十六进制值输入的输入数据转换为二进制数字流。

您一次只能读取输入的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;
}
© www.soinside.com 2019 - 2024. All rights reserved.