C语言实现16进制到2进制的转换

今天帮同学看代码,她想实现把16进制的数转换成2进制显示,百度了一下,代码是不少,但是都太长了,想起C和指针里面有似曾相识的东西,就自己写了一下,还是遇到了一些问题。

1. 没有注意到字符串存储的时候后面会自动加一个\0,因此想存放一个长度为n的字符串,需要开辟n + 1 个字节的空间,最后一个字节存放\0.
2. 循环过程中注意循环变量每次迭代过程中都要想终止条件靠近,避免死循环.
3.利用数组下标的控制来模拟栈

废话太多了,下面给出源码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void
HextoTwo(int num)
{
    int res;
    int i = 0;
    char buf[BUFSIZ][5] = {"0000"};
    char reference[16][5] = {"0000","0001","0010","0011",\
                        "0100","0101","0110","0111",\
                        "1000","1001","1010","1011",\
                        "1100","1101","1110","1111"};

    while(num / 16 !=  0)
    {
        res = num % 16;
        strcpy(buf[i++], reference[res]);
        num = num / 16;
    }

    res = num % 16;
    strcpy(buf[i++], reference[res]);

    while(i > 0)
        printf("%s ", buf[--i]);
}

int main()
{
    int num = 0xfa;
    HextoTwo(num);
    return EXIT_SUCCESS;
}

下面给出递归解法,话说天才用递归,然而本人很菜…….


void
HextoTwo(int num)
{
    int remainder;
    char buf[16][5] = {"0000","0001","0010","0011",\
                        "0100","0101","0110","0111",\
                        "1000","1001","1010","1011",\
                        "1100","1101","1110","1111"};
    if(0 == num)
        return;

    remainder = num % 16;
    HextoTwo(num >> 4);
    printf("%s ", buf[remainder]);
}

就这么简单,还是要多写代码多思考,算法没有形成之前不要动手。

猜你喜欢

转载自blog.csdn.net/qq_34302921/article/details/80058075