C语言 二进制数转为十进制

编写一个程序来读取二进制数的字节作为字符串。然后将其转换为相应的十进制数并输出。
例:如果输入是10000000,那么输出是128;输入00000001,输出为1。
要求:
1)假设所有都是非负数,即第一个位不是符号。如果输入的位数小于8,则在左边加0,使字符串有8位;
2)如果输入的位数大于8位,只使用前8位,将其余的去掉。

代码如下:

#include <stdio.h>
int main()
{
    int s = 0;
    int i=0;
    char buf[60]={0};
    printf("请输入二进制字符串:");
    scanf("%s",buf); //读取二进制字符串
    while(buf[i] != '\0')
    {
        s = s *2 + buf[i]-'0';
        i++;
        if(i==8) break;
    }
    printf("%d",s);
    return 0;
}



#include<stdio.h>
#include<math.h>
 
int main()
{
    long int i,n,x=0,a;
    printf("Enter any binary number: ");
    scanf("%ld",&n);
    printf("\nThe decimal conversion of %ld is ",n);
    
    for(i=0;n!=0;++i)
    {
        a=n%10;
        x=(a)*(pow(2,i))+x;
        n=n/10;
    }
    
    printf("%ld",x);
    
    return 0;    
}
#include <stdio.h>
#include <math.h>
int main()
{
    char s[100];
    int len = 0,k=0,i;
    unsigned char r = 0;
    gets(s);
    len = strlen(s);
    if(len > 8)
      k = len - 8;
    for(i=k;i<len;i++)
        r = r*2+s[i]-'0';
    printf("%d",r);
    return 0;
}