1. 程式人生 > >C語言實現16進位制到2進位制的轉換

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

就這麼簡單,還是要多寫程式碼多思考,演算法沒有形成之前不要動手。