Sasakisouji 2022-01-14 18:51 采纳率: 71.4%
浏览 9

纯c语言实现16进制字符串向8进制转换

大致思路:创建动态储存空间输入要处理的数,转换为2进制后再转换为8进制

问题:2进制向8进制转换时需要在字符串首添加0,单纯地进行字符串连接会导致访问出错,不知道如何处理;
感觉当前方法效率过低,不知道是否有更简洁的方法。


#include"stdio.h"
#include"string.h"
#include"stdlib.h"

int main()
{
    int n,i;char *a,*b,*c;
    b=(char *)malloc(400000);
    memset(b, 0, 400000);
    a=(char *)malloc(400000);
    scanf("%s",a);
    getchar();
    for(i=0;i<strlen(a);i++)
        switch(a[i])
    {
        case'0':strcat(b,"0000");break;
        case'1':strcat(b,"0001");break;
        case'2':strcat(b,"0010");break;
        case'3':strcat(b,"0011");break;
        case'4':strcat(b,"0100");break;
        case'5':strcat(b,"0101");break;
        case'6':strcat(b,"0110");break;
        case'7':strcat(b,"0111");break;
        case'8':strcat(b,"1000");break;
        case'9':strcat(b,"1001");break;
        case'A':strcat(b,"1010");break;
        case'B':strcat(b,"1011");break;
        case'C':strcat(b,"1100");break;
        case'D':strcat(b,"1101");break;
        case'E':strcat(b,"1110");break;
        case'F':strcat(b,"1111");break;
    }
    printf("%s",b);
    memset(a,0,400000);
    n=strlen(b)%3;
    c=(char *)malloc(400000);
    //memset(c,0,400000);
    *c='0';//创建只有一位“0”的字符串
    i=0;
    while(i<(3-n))
    {
        strcpy(a,c);
        strcat(a,b);
        strcpy(b,a);
    };//通过字符串连接,将原字符串前补“0”
    free(c);
    memset(a,0,400000);
    for(i=0;i<strlen(b)%3;i++)//每3位一组,转换为8进制
    {
        if(*(b+i*3)==0&&*(b+i*3+1)==0&&*(b+i*3+2)==0)strcat(a,"0");
        if(*(b+i*3)==0&&*(b+i*3+1)==0&&*(b+i*3+2)==1)strcat(a,"1");
        if(*(b+i*3)==0&&*(b+i*3+1)==1&&*(b+i*3+2)==0)strcat(a,"2");
        if(*(b+i*3)==0&&*(b+i*3+1)==1&&*(b+i*3+2)==1)strcat(a,"3");
        if(*(b+i*3)==1&&*(b+i*3+1)==0&&*(b+i*3+2)==0)strcat(a,"4");
        if(*(b+i*3)==1&&*(b+i*3+1)==0&&*(b+i*3+2)==1)strcat(a,"5");
        if(*(b+i*3)==1&&*(b+i*3+1)==1&&*(b+i*3+2)==0)strcat(a,"6");
        if(*(b+i*3)==1&&*(b+i*3+1)==1&&*(b+i*3+2)==1)strcat(a,"7");
    }
    printf("%s",a);
}

麻烦了,谢谢。

  • 写回答

1条回答 默认 最新

  • Tterk 2022-01-14 20:00
    关注

    img

    评论

报告相同问题?

问题事件

  • 创建了问题 1月14日

悬赏问题

  • ¥30 STM32 INMP441无法读取数据
  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
  • ¥15 用visualstudio2022创建vue项目后无法启动
  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥500 把面具戴到人脸上,请大家贡献智慧
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
  • ¥15 各位 帮我看看如何写代码,打出来的图形要和如下图呈现的一样,急
  • ¥30 c#打开word开启修订并实时显示批注
  • ¥15 如何解决ldsc的这条报错/index error
  • ¥15 VS2022+WDK驱动开发环境