鱼C论坛

 找回密码
 立即注册
查看: 1116|回复: 1

[已解决]进制转化八进制转十六进制

[复制链接]
发表于 2020-12-23 11:09:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 一世轻尘 于 2020-12-23 13:48 编辑

如下
最佳答案
2020-12-23 14:24:30
// 八进制数转换成十六进制数
#include<stdio.h>
#include<math.h>
int main()
{
        int i = 0, j = 0, k, m, n = 20, num = 0;
        double sum = 0;
        char ch, binaryNum[21];           // 对于支持C99的编译器,元素个数用n
        char binary_Num[21];              // 存放反序的二进制数
        char Num8[21];                    // 存放八进制数
        char Num16[21];                   // 存放十六进制数
        printf("请输入八进制数:");
        while ((ch = getchar()) != '\n')  // 输入二进制数
        {
                Num8[i] = ch;
                i++;
        }
        n = i;

        // 八进制转二进制
        for (i = 0;i < n;i++)
        {
                ch = Num8[i];
                k = ch - '0';
                switch (k)
                {
                case 0:
                {
                        binaryNum[j] = '0';
                        binaryNum[j + 1] = '0';
                        binaryNum[j + 2] = '0';
                        break;
                }
                case 1:
                {
                        binaryNum[j] = '0';
                        binaryNum[j + 1] = '0';
                        binaryNum[j + 2] = '1';
                        break;
                }
                case 2:
                {
                        binaryNum[j] = '0';
                        binaryNum[j + 1] = '1';
                        binaryNum[j + 2] = '0';
                        break;
                }
                case 3:
                {
                        binaryNum[j] = '0';
                        binaryNum[j + 1] = '1';
                        binaryNum[j + 2] = '1';
                        break;
                }
                case 4:
                {
                        binaryNum[j] = '1';
                        binaryNum[j + 1] = '0';
                        binaryNum[j + 2] = '0';
                        break;
                }
                case 5:
                {
                        binaryNum[j] = '1';
                        binaryNum[j + 1] = '0';
                        binaryNum[j + 2] = '1';
                        break;
                }
                case 6:
                {
                        binaryNum[j] = '1';
                        binaryNum[j + 1] = '1';
                        binaryNum[j + 2] = '0';
                        break;
                }
                case 7:
                {
                        binaryNum[j] = '1';
                        binaryNum[j + 1] = '1';
                        binaryNum[j + 2] = '1';
                }
                }
                j += 3;
        }
        n = j;
        printf("转换的二进制数为:");
        for (i = 0;i < n;i++)
        {
                if (i % 4 != 0)
                {
                        printf("%c", binaryNum[i]);
                }
                else
                {
                        printf(" ");
                        printf("%c", binaryNum[i]);
                }
        }
        printf("\n");

        // 二进制数组反序
        i = 0;
        while ((n - i) > 0)
        {
                binary_Num[i] = binaryNum[n - i - 1];
                i++;
        }
        binary_Num[n] = '\0';

        // 二进制转十六进制
        k = 0;
        for (i = 0;i < n;i += 4)
        {
                for (j = 0;j < 4;j++)
                {
                        m = binary_Num[i + j] - '0';      // 将字符转换为数字
                        if (j == 0 && (m == 0 || m == 1)) // 多加的m条件是防止结束符参与计算
                                num = m * 1;
                        if (j == 1 && (m == 0 || m == 1))
                                num += m * 2;
                        if (j == 2 && (m == 0 || m == 1))
                                num += m * 4;
                        if (j == 3 && (m == 0 || m == 1))
                                num += m * 8;
                }
                if (num >= 10 && num <= 16)           // 将数字转换为字符
                        ch = (num - 10) + 'A';
                else
                        ch = num + '0';
                Num16[k] = ch;
                num = 0;
                k++;
        }
        Num16[k] = '\n';

        i = 0;                                  // 将反序的16进制数再反序回来
        while ((k - i) > k / 2)
        {
                ch = Num16[i];
                Num16[i] = Num16[k - i - 1];
                Num16[k - i - 1] = ch;
                i++;
        }

        printf("转换为16进制数为:");
        for (i = 0;i < k;i++)
                printf("%c", Num16[i]);
        printf("\n");
}
1.png

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-12-23 14:24:30 | 显示全部楼层    本楼为最佳答案   
// 八进制数转换成十六进制数
#include<stdio.h>
#include<math.h>
int main()
{
        int i = 0, j = 0, k, m, n = 20, num = 0;
        double sum = 0;
        char ch, binaryNum[21];           // 对于支持C99的编译器,元素个数用n
        char binary_Num[21];              // 存放反序的二进制数
        char Num8[21];                    // 存放八进制数
        char Num16[21];                   // 存放十六进制数
        printf("请输入八进制数:");
        while ((ch = getchar()) != '\n')  // 输入二进制数
        {
                Num8[i] = ch;
                i++;
        }
        n = i;

        // 八进制转二进制
        for (i = 0;i < n;i++)
        {
                ch = Num8[i];
                k = ch - '0';
                switch (k)
                {
                case 0:
                {
                        binaryNum[j] = '0';
                        binaryNum[j + 1] = '0';
                        binaryNum[j + 2] = '0';
                        break;
                }
                case 1:
                {
                        binaryNum[j] = '0';
                        binaryNum[j + 1] = '0';
                        binaryNum[j + 2] = '1';
                        break;
                }
                case 2:
                {
                        binaryNum[j] = '0';
                        binaryNum[j + 1] = '1';
                        binaryNum[j + 2] = '0';
                        break;
                }
                case 3:
                {
                        binaryNum[j] = '0';
                        binaryNum[j + 1] = '1';
                        binaryNum[j + 2] = '1';
                        break;
                }
                case 4:
                {
                        binaryNum[j] = '1';
                        binaryNum[j + 1] = '0';
                        binaryNum[j + 2] = '0';
                        break;
                }
                case 5:
                {
                        binaryNum[j] = '1';
                        binaryNum[j + 1] = '0';
                        binaryNum[j + 2] = '1';
                        break;
                }
                case 6:
                {
                        binaryNum[j] = '1';
                        binaryNum[j + 1] = '1';
                        binaryNum[j + 2] = '0';
                        break;
                }
                case 7:
                {
                        binaryNum[j] = '1';
                        binaryNum[j + 1] = '1';
                        binaryNum[j + 2] = '1';
                }
                }
                j += 3;
        }
        n = j;
        printf("转换的二进制数为:");
        for (i = 0;i < n;i++)
        {
                if (i % 4 != 0)
                {
                        printf("%c", binaryNum[i]);
                }
                else
                {
                        printf(" ");
                        printf("%c", binaryNum[i]);
                }
        }
        printf("\n");

        // 二进制数组反序
        i = 0;
        while ((n - i) > 0)
        {
                binary_Num[i] = binaryNum[n - i - 1];
                i++;
        }
        binary_Num[n] = '\0';

        // 二进制转十六进制
        k = 0;
        for (i = 0;i < n;i += 4)
        {
                for (j = 0;j < 4;j++)
                {
                        m = binary_Num[i + j] - '0';      // 将字符转换为数字
                        if (j == 0 && (m == 0 || m == 1)) // 多加的m条件是防止结束符参与计算
                                num = m * 1;
                        if (j == 1 && (m == 0 || m == 1))
                                num += m * 2;
                        if (j == 2 && (m == 0 || m == 1))
                                num += m * 4;
                        if (j == 3 && (m == 0 || m == 1))
                                num += m * 8;
                }
                if (num >= 10 && num <= 16)           // 将数字转换为字符
                        ch = (num - 10) + 'A';
                else
                        ch = num + '0';
                Num16[k] = ch;
                num = 0;
                k++;
        }
        Num16[k] = '\n';

        i = 0;                                  // 将反序的16进制数再反序回来
        while ((k - i) > k / 2)
        {
                ch = Num16[i];
                Num16[i] = Num16[k - i - 1];
                Num16[k - i - 1] = ch;
                i++;
        }

        printf("转换为16进制数为:");
        for (i = 0;i < k;i++)
                printf("%c", Num16[i]);
        printf("\n");
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 09:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表