C 转为2进制 8进制 16进制

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

}
原文地址:https://www.cnblogs.com/cart55free99/p/2983336.html