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]);
}

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

  • 13
    点赞
  • 71
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值