C语言 如何将二进制数打印成十六进制数?

5ssjco0h  于 2022-12-02  发布在  其他
关注(0)|答案(1)|浏览(186)

我有一个二进制数,我需要打印它作为十六进制数。(这是一个更大的项目中的功能)
我做了这个函数,但是我只能反向打印它。这是函数:

int printOctalToHex (unsigned int octalNum) {
    unsigned int binaryNum;
    int temp;
    int i = 1;
    binaryNum = octalToBinary(octalNum);
    while (1) {
        temp = (binaryNum % 10000);
        binaryNum = binaryNum / 10000;

        if (temp == 0) {
            printf("0");
        }
        if (temp == 1) {
            printf("1");
        }
        if (temp == 10) {
            printf("2");
        }
        if (temp == 11) {
            printf("3");
        }
        if (temp == 100) {
            printf("4");
        }
        if (temp == 101) {
            printf("5");
        }
        if (temp == 110) {
            printf("6");
        }
        if (temp == 111) {
            printf("7");
        }
        if (temp == 1000) {
            printf("8");
        }
        if (temp ==1001) {
            printf("9");
        }
        if (temp == 1010) {
            printf("A");
        }
        if (temp == 1011) {
            printf("B");
        }
        if (temp == 1100) {
            printf("C");
        }
        if (temp == 1101) {
            printf("D");
        }
        if (temp == 1110) {
            printf("E");
        }
        if (temp == 1111) {
            printf("F");
        }
        if (binaryNum < 1) {
            printf("\n");
            break;
        }

        i++;
    }

}

有人能帮我吗?TY!
而如果有人有更好的方法来做这件事我会很乐意看到的,因为我的路很长。

1tuwyuhd

1tuwyuhd1#

您只需要两个函数,其中一个是递归函数:

int f_putchar(char c)
{
    write(1, &c, 1);
    return 1;
}

void f_hex(int nb)
{
    char *hex = "0123456789abcdef";
    if (nb < 16)
    {
        f_putchar(hex[nb]);
    }
    else
    {
        f_hex(nb / 16);
        f_hex(nb % 16);
    }
}

相关问题