鱼C论坛

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

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

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

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

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

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

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

  19.         // 八进制转二进制
  20.         for (i = 0;i < n;i++)
  21.         {
  22.                 ch = Num8[i];
  23.                 k = ch - '0';
  24.                 switch (k)
  25.                 {
  26.                 case 0:
  27.                 {
  28.                         binaryNum[j] = '0';
  29.                         binaryNum[j + 1] = '0';
  30.                         binaryNum[j + 2] = '0';
  31.                         break;
  32.                 }
  33.                 case 1:
  34.                 {
  35.                         binaryNum[j] = '0';
  36.                         binaryNum[j + 1] = '0';
  37.                         binaryNum[j + 2] = '1';
  38.                         break;
  39.                 }
  40.                 case 2:
  41.                 {
  42.                         binaryNum[j] = '0';
  43.                         binaryNum[j + 1] = '1';
  44.                         binaryNum[j + 2] = '0';
  45.                         break;
  46.                 }
  47.                 case 3:
  48.                 {
  49.                         binaryNum[j] = '0';
  50.                         binaryNum[j + 1] = '1';
  51.                         binaryNum[j + 2] = '1';
  52.                         break;
  53.                 }
  54.                 case 4:
  55.                 {
  56.                         binaryNum[j] = '1';
  57.                         binaryNum[j + 1] = '0';
  58.                         binaryNum[j + 2] = '0';
  59.                         break;
  60.                 }
  61.                 case 5:
  62.                 {
  63.                         binaryNum[j] = '1';
  64.                         binaryNum[j + 1] = '0';
  65.                         binaryNum[j + 2] = '1';
  66.                         break;
  67.                 }
  68.                 case 6:
  69.                 {
  70.                         binaryNum[j] = '1';
  71.                         binaryNum[j + 1] = '1';
  72.                         binaryNum[j + 2] = '0';
  73.                         break;
  74.                 }
  75.                 case 7:
  76.                 {
  77.                         binaryNum[j] = '1';
  78.                         binaryNum[j + 1] = '1';
  79.                         binaryNum[j + 2] = '1';
  80.                 }
  81.                 }
  82.                 j += 3;
  83.         }
  84.         n = j;
  85.         printf("转换的二进制数为:");
  86.         for (i = 0;i < n;i++)
  87.         {
  88.                 if (i % 4 != 0)
  89.                 {
  90.                         printf("%c", binaryNum[i]);
  91.                 }
  92.                 else
  93.                 {
  94.                         printf(" ");
  95.                         printf("%c", binaryNum[i]);
  96.                 }
  97.         }
  98.         printf("\n");

  99.         // 二进制数组反序
  100.         i = 0;
  101.         while ((n - i) > 0)
  102.         {
  103.                 binary_Num[i] = binaryNum[n - i - 1];
  104.                 i++;
  105.         }
  106.         binary_Num[n] = '\0';

  107.         // 二进制转十六进制
  108.         k = 0;
  109.         for (i = 0;i < n;i += 4)
  110.         {
  111.                 for (j = 0;j < 4;j++)
  112.                 {
  113.                         m = binary_Num[i + j] - '0';      // 将字符转换为数字
  114.                         if (j == 0 && (m == 0 || m == 1)) // 多加的m条件是防止结束符参与计算
  115.                                 num = m * 1;
  116.                         if (j == 1 && (m == 0 || m == 1))
  117.                                 num += m * 2;
  118.                         if (j == 2 && (m == 0 || m == 1))
  119.                                 num += m * 4;
  120.                         if (j == 3 && (m == 0 || m == 1))
  121.                                 num += m * 8;
  122.                 }
  123.                 if (num >= 10 && num <= 16)           // 将数字转换为字符
  124.                         ch = (num - 10) + 'A';
  125.                 else
  126.                         ch = num + '0';
  127.                 Num16[k] = ch;
  128.                 num = 0;
  129.                 k++;
  130.         }
  131.         Num16[k] = '\n';

  132.         i = 0;                                  // 将反序的16进制数再反序回来
  133.         while ((k - i) > k / 2)
  134.         {
  135.                 ch = Num16[i];
  136.                 Num16[i] = Num16[k - i - 1];
  137.                 Num16[k - i - 1] = ch;
  138.                 i++;
  139.         }

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

本帖被以下淘专辑推荐:

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

使用道具 举报

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

  19.         // 八进制转二进制
  20.         for (i = 0;i < n;i++)
  21.         {
  22.                 ch = Num8[i];
  23.                 k = ch - '0';
  24.                 switch (k)
  25.                 {
  26.                 case 0:
  27.                 {
  28.                         binaryNum[j] = '0';
  29.                         binaryNum[j + 1] = '0';
  30.                         binaryNum[j + 2] = '0';
  31.                         break;
  32.                 }
  33.                 case 1:
  34.                 {
  35.                         binaryNum[j] = '0';
  36.                         binaryNum[j + 1] = '0';
  37.                         binaryNum[j + 2] = '1';
  38.                         break;
  39.                 }
  40.                 case 2:
  41.                 {
  42.                         binaryNum[j] = '0';
  43.                         binaryNum[j + 1] = '1';
  44.                         binaryNum[j + 2] = '0';
  45.                         break;
  46.                 }
  47.                 case 3:
  48.                 {
  49.                         binaryNum[j] = '0';
  50.                         binaryNum[j + 1] = '1';
  51.                         binaryNum[j + 2] = '1';
  52.                         break;
  53.                 }
  54.                 case 4:
  55.                 {
  56.                         binaryNum[j] = '1';
  57.                         binaryNum[j + 1] = '0';
  58.                         binaryNum[j + 2] = '0';
  59.                         break;
  60.                 }
  61.                 case 5:
  62.                 {
  63.                         binaryNum[j] = '1';
  64.                         binaryNum[j + 1] = '0';
  65.                         binaryNum[j + 2] = '1';
  66.                         break;
  67.                 }
  68.                 case 6:
  69.                 {
  70.                         binaryNum[j] = '1';
  71.                         binaryNum[j + 1] = '1';
  72.                         binaryNum[j + 2] = '0';
  73.                         break;
  74.                 }
  75.                 case 7:
  76.                 {
  77.                         binaryNum[j] = '1';
  78.                         binaryNum[j + 1] = '1';
  79.                         binaryNum[j + 2] = '1';
  80.                 }
  81.                 }
  82.                 j += 3;
  83.         }
  84.         n = j;
  85.         printf("转换的二进制数为:");
  86.         for (i = 0;i < n;i++)
  87.         {
  88.                 if (i % 4 != 0)
  89.                 {
  90.                         printf("%c", binaryNum[i]);
  91.                 }
  92.                 else
  93.                 {
  94.                         printf(" ");
  95.                         printf("%c", binaryNum[i]);
  96.                 }
  97.         }
  98.         printf("\n");

  99.         // 二进制数组反序
  100.         i = 0;
  101.         while ((n - i) > 0)
  102.         {
  103.                 binary_Num[i] = binaryNum[n - i - 1];
  104.                 i++;
  105.         }
  106.         binary_Num[n] = '\0';

  107.         // 二进制转十六进制
  108.         k = 0;
  109.         for (i = 0;i < n;i += 4)
  110.         {
  111.                 for (j = 0;j < 4;j++)
  112.                 {
  113.                         m = binary_Num[i + j] - '0';      // 将字符转换为数字
  114.                         if (j == 0 && (m == 0 || m == 1)) // 多加的m条件是防止结束符参与计算
  115.                                 num = m * 1;
  116.                         if (j == 1 && (m == 0 || m == 1))
  117.                                 num += m * 2;
  118.                         if (j == 2 && (m == 0 || m == 1))
  119.                                 num += m * 4;
  120.                         if (j == 3 && (m == 0 || m == 1))
  121.                                 num += m * 8;
  122.                 }
  123.                 if (num >= 10 && num <= 16)           // 将数字转换为字符
  124.                         ch = (num - 10) + 'A';
  125.                 else
  126.                         ch = num + '0';
  127.                 Num16[k] = ch;
  128.                 num = 0;
  129.                 k++;
  130.         }
  131.         Num16[k] = '\n';

  132.         i = 0;                                  // 将反序的16进制数再反序回来
  133.         while ((k - i) > k / 2)
  134.         {
  135.                 ch = Num16[i];
  136.                 Num16[i] = Num16[k - i - 1];
  137.                 Num16[k - i - 1] = ch;
  138.                 i++;
  139.         }

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-2 13:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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