C语言二进制转变问题

1.怎么将二进制转换为十进制,重点是小数部分怎么转换
2.怎么将二进制转变为八进制或者是十六进制,包含小数部分

https://blog.csdn.net/djzhao627/article/details/103651761


int main(int argc,char* argv[])
{
    int menu;
    int k;
    float temp;
    float f;
    LinkQueue *l;
    LinkStack *s = NULL;
    char chs[100];
    char chs1[100];
    char chs2[100];
    DataType e;
    float num;
    int tt=0;/*输出栈元素时使用*/ 
    printf("             进制转换         \n"); 
    while(TRUE)
    {
        l = LQueueCreateEmpty();
        s = (LinkStack *)malloc(sizeof(LinkStack));
        s->data=1;
        s->next=NULL;   
        printf("*****************************************\n");
        printf("**    1、10-2进制小数转换              **\n");
        printf("**    2、2-10进制小数转换              **\n");
        printf("**    3、退出                          **\n");
        printf("*****************************************\n");
        scanf("%d",&menu);
        switch(menu)
        {
            case 1:
                getchar();
                printf("请输入需要转换的数字:\n");
                scanf("%f",&temp);
                if(temp > 1.0 && temp != (int)temp) 
                {/* 如果输入的不是一个整数并且大于1 */ 
                    s = IntConverDToB((int)temp,s);  
                    DecConverDToB(temp - (int)temp,l);
                    printf("转化后的二进制小数为:",temp);
                    while(!LStackIsEmpty(s))
                    {
                        printf("%d",LStackGetTop(s)); /* 输出整数部分 */ 
                        s=LStackPop(s,&tt);
                    }
                    printf(".",temp);
                    while(!LQueueIsEmpty(l)) /* 输出小数部分 */ 
                    {
                        LQueueDeQueue(l,&e);
                        printf("%d",e);  
                    }
                    printf("\n");           
                }
                else
                {
                    if(temp == (int)temp) /* 如果输入的是一个整数 */ 
                    {
                        printf("%d转化后的二进制小数为:",(int)temp);
                        s = IntConverDToB((int)temp,s);  
                        while(!LStackIsEmpty(s)) /* 输出整数部分 */ 
                        {
                            printf("%d",LStackGetTop(s)); 
                            s=LStackPop(s,&tt);
                        }
                        printf(".0\n"); 
                    }
                    else /* 如果输入的是一个小于1的小数 */ 
                    {
                        printf("----------\n");
                        printf("转化后的二进制小数为:",temp);
                        DecConverDToB(temp,l);
                        printf("0.",temp);
                        while(!LQueueIsEmpty(l))  /* 输出小数部分 */ 
                        {
                            LQueueDeQueue(l,&e);
                            printf("%d",e);  
                        }
                        printf("\n"); 
                        getchar();
                    }
                }
                break; 
        case 2: 
            getchar();
            printf("请输入需要转换的二进制数字:\n");
            gets(chs);      
            k = StringSplit(chs,chs1,chs2); 
            if(k != -1)
            {
                num = IntConverBToD(chs1,s);
                f = DecConverBToD(chs2,l);
                if(-1 != num && f != -1)
                    printf("转化后的十进制形式为:%f\n",(float)num + f);
                else
                    printf("输入格式错误\n");
            }
            else 
            {
                num = IntConverBToD(chs,s);
                if(-1 != num)
                    printf("转化后的十进制形式为:%f\n",(float)num);
                else
                    printf("输入格式错误\n");
            }

            break;
        case 3: /* 退出 */
            return 0;
        default: /* 输入不满足要求,提示输入错误 */
            printf("输入错误,请重新输入!\n");
            continue;   
        }
    }
    return 0;
}

main()
{
char a,b;
float sum = 0, flag = 0, i = -1;
printf("Please input the binary string:");
while((a = getchar()) != '#')
{
if(a != '.')
{
sum = sum * 2 + a - '0';
}
if(a == '.')
{
flag = 1;
break;
}
}
while(flag == 1 && (b = getchar()) != '#')
{
sum += pow(2, i) * (b - '0');
i--;
}
if(flag == 1)
printf("The result is:%f\n", sum);
else
printf("The result is:%d\n", (int)sum);
}

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

main()
{
char a[100];
int i, j, n;
double sum= 0;

printf("Please input the binary string:");
gets(a);
for(n= 0; a[n]!= '#'; n++)           /*确定字符序列长度*/
      ;
for(i= 0; a[i]!= '.' && i< n; i++)  /*确定小数点的位置*/
      ;
for(j=0; j< i; j++)
    sum= sum* 2 + (a[j]- '0');
for(j=5; j< n; j++)
    sum= sum+ (a[j]- '0') * pow(2,i - j);
if(i!= n)
    printf("The result is: %f", sum);
else
    printf("The result is: %d", (int)sum );

return 0;

}