请问这个程序怎么写呀

输入一个二进制数字 m,然后分别按照二进制,十进制,十六进制输出。
输入范例一:
1010
输出范例一:
二进制:1010
十进制:10
十六进制:A
输入范例二:
101010000
输出范例二:
二进制:11011
十进制:27
十六进制:1B

输入范例二是不是有问题?
输入范例二:
101010000
输出范例二:
二进制:11011
同样是二进制,输入和输出不一样?

#include <stdio.h>
int main()
{
    char buf[10]={0};
    int n=0,i=0;
    int r = 1;
    scanf("%s",buf);
    while (buf[i])
    {
        n = n* 2 + r*(buf[i]-'0');
        i++;
    }
    
    printf("二进制:%s\n",buf);
    printf("十进制:%d\n",n);
    printf("十六进制:%X\n",n);
    return 0;
}