C语言二,八,16进制转换

各位好,我是一名高中生萌星,不会这些转换类的问题 ,就像那些二进制转换,八进制八进制转换,16进制之类,请帮帮我吧 😂


/*十进制转二进制输出 */
void fun1(int n)
{
    if(n/2)// 非0为真
        fun1(n/2);
    putchar('0'+n%2);
}

/*十进制转八进制输出 */
void fun2(int n)
{
    if(n/8)
        fun2(n/8);
    putchar('0'+n%8);
}

/*十进制转十六进制输出 */
void fun3(int n)
{
    if(n/16)
        fun3(n/16);
    int i = n%16;
    if(i<10)
        putchar('0'+i);
    else
        putchar('a'+i-10);
}

/*二进制转十进制 */
int fun4(char *str)
{
    int num = 0;
    while(*str != '\0')
    {
        int i = *str-'0';
        if(i>=0 && i<=1)// 跳过其它字符 
            num = num*2+i;
        str++;
    }
    return num;
}

/*八进制转十进制 */
int fun5(char *str)
{
    int num = 0;
    while(*str != '\0')
    {
        int i = *str-'0';
        if(i>=0 && i<8)// 跳过其它字符
            num = num*8+i;
        str++;
    }
    return num;
}

/*十六进制转十进制 */ 
int fun6(char *str)
{
    int num = 0;
    while(*str != '\0')
    {
        char ch = *str;
        if(ch>='0' && ch<='9')
            num = num*16+ch-'0';
        if(ch>='a' && ch<='f')
            num = num*16+10+ch-'a';
        str++;
    }
    return num;
} 

可参考:https://blog.csdn.net/u010431205/article/details/50504898

10进制转换2,8,16进制


#include <stdio.h>
char *dto(int x, char *s, int f)
{
    int i, n = 0;
    int v;
    do
    {
        v = x % f;
        if (v < 10)
            s[n] = v + '0';
        else
            s[n] = v - 10 + 'A';
        x = x / f;
        n++;
    } while (x > 0);
    for (i = 0; i < n / 2; i++)
    {
        v = s[i];
        s[i] = s[n - 1 - i];
        s[n - 1 - i] = v;
    };
    s[n] = '\0';
    return s;
}
int main()
{
    int x;
    char s[60];
    scanf("%d", &x);
    dto(x, s, 2);
    printf("转换2进制:%s\n", s);
    dto(x, s, 8);
    printf("转换8进制:%s\n", s);
    dto(x, s, 16);
    printf("转换16进制%s\n", s);
    return 0;
}

img


2,8,16进制转换10进制

#include <stdio.h>
int fdto(char *s, int f)
{
    int n = 0;
    while(*s != '\0')
    {
        if(*s>='a' && *s<='f')
            n = n*f+(*s)-'a'+10;
        else if(*s>='A' && *s<='F')
            n = n*f+(*s)-'A'+10;
        else if(*s>='0' && *s<='9')
            n = n*f+(*s)-'0';
        s++;
    }
    return n;
}
int main()
{
    int x;
    char s[60];
    printf("输入要转换的进制数:");
    scanf("%d", &x);
    printf("输入%d进制:",x);
    scanf("%s", s);
    printf("转换10进制:%d\n", fdto(s, x));
    return 0;
}

img

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632