今天帮同学看代码,她想实现把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]);
}
就这么简单,还是要多写代码多思考,算法没有形成之前不要动手。