八进制转换成二进制、十进制、十六进制

1、八进制转换成二进制

#include <math.h>
#include <stdio.h>

long octalToBinary(int octalnum)
{
    int decimalnum = 0, i = 0;
    long binarynum = 0;

    while (octalnum != 0)
    {
        decimalnum = decimalnum + (octalnum % 10) * pow(8, i);
        i++;
        octalnum = octalnum / 10;
    }

    i = 1;

    while (decimalnum != 0)
    {
        binarynum = binarynum + (long)(decimalnum % 2) * i;
        decimalnum = decimalnum / 2;
        i = i * 10;
    }

    return binarynum;
}

int main()
{
    int octalnum;

    printf("Enter an octal number: ");
    scanf("%d", &octalnum);

    printf("Equivalent binary number is: %ld", octalToBinary(octalnum));
    return 0;
}

测试结果:

Enter an octal number: 100
Equivalent binary number is: 1000000

2、八进制转换成十进制

#include <math.h>
#include <stdio.h>

int convertValue(int num, int i) { return num * pow(8, i); }

long long toDecimal(int octal_value)
{
    int decimal_value = 0, i = 0;

    while (octal_value)
    {
        decimal_value += convertValue(octal_value % 10, i++);

        octal_value /= 10;
    }

    return decimal_value;
}

int main()
{
    printf("Enter octal value: ");

    int octal_value;

    scanf("%d", &octal_value);

    long long result = toDecimal(octal_value);

    printf("%d in decimal is %lld\n", octal_value, result);

    return 0;
}

测试结果:

Enter octal value: 100
100 in decimal is 64


3、八进制转换成十六进制

#include <assert.h> 
#include <math.h> 
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

#if 0
long octalToDecimal(long octalValue)
{
    long decimalValue = 0;
    int i = 0;
    while (octalValue) 
    {
        decimalValue += (long)(octalValue % 10) * pow(8, i++);
        octalValue /= 10;
    }
    return decimalValue;
}
#endif

char *octalToHexadecimal(long octalValue)
{
    char *hexadecimalValue = malloc(256 * sizeof(char));
    sprintf(hexadecimalValue, "%lX", octalToDecimal(octalValue));
    return hexadecimalValue;
}

static void test()
{
    assert(strcmp(octalToHexadecimal(213), "8B") == 0);

    assert(strcmp(octalToHexadecimal(174), "7C") == 0);
}

int main()
{
    test();

    int octalValue;
    printf("Enter an octal number: ");
    scanf("%d", &octalValue);

    char *hexadecimalValue = octalToHexadecimal(octalValue);
    printf("Equivalent hexadecimal number is: %s", hexadecimalValue);

    free(hexadecimalValue);

    return 0;
}

 测试结果:

Enter an octal number: 100
Equivalent hexadecimal number is: 40

【欢迎关注编码小哥,学习更多实用的编程方法】

 

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编码小哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值