C語言實現16進位制到2進位制的轉換
阿新 • • 發佈:2019-02-15
今天幫同學看程式碼,她想實現把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]);
}