#include <stdio.h> #include <stdlib.h> #define N 8 void toBin(int n,int dec); void toBin2(int n,int dec); int main(){ //十进制转2进制 //toBin(6,2);//ok //十进制转8进制 //toBin(26,8);//ok toBin2(31,16); } /** 看一个例子 6转2进制 6%2=0 6/2=3 ---> 非0 可以继续算 ----> 3%2=1 3/2=1 ---> 非0 可以继续算 ----> 1%2=1 1/2=0 --->结束 */ void toBin(int n,int dec){ char arr[N]={0}; int i=N-1;//由于最先算出的数是末尾 所以先指向末尾 arr[i--]=n%dec+'0'; while(n/dec!=0){ n=n/dec; arr[i--]=n%dec+'0'; } //输出 i=0; for(i=0;i<N;i++){ if(arr[i]==0){ }else { printf("%c,",arr[i]); } } } /** 转16进制 其实原理还是一样 不同的是 对于超过9的数字 要表示为A */ void toBin2(int n,int dec){ char arr[N]={0}; int i=N-1;//由于最先算出的数是末尾 所以先指向末尾 //控制字符 超过10的要输出A if(n%dec<=9){ arr[i--]=n%dec+'0'; // }else{ //n%dec-10+'A';如果n%dec是10 这么处理就是A了 arr[i--]=n%dec-10+'A'; } while(n/dec!=0){ n=n/dec; if(n%dec<=9){ arr[i--]=n%dec+'0'; // }else{ //n%dec-10+'A';如果n%dec是10 这么处理就是A了 arr[i--]=n%dec-10+'A'; } } //输出 i=0; for(i=0;i<N;i++){ if(arr[i]==0){ }else { printf("%c,",arr[i]); } } }