Convertir un nombre binaire en décimal en C

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

unsigned long int puiss(unsigned long int x, int n)
{
  if(n == 0)
    return 1;
  if(n == 1)
    return x;
  unsigned long int x2 = puiss(x,n/2);
  if(n%2 == 0)
    return x2 * x2;
  return x2 * x2 * x;
}
int char_to_int(char d)
{
 char str[2];
 str[0] = d;
 str[1] = '\0';
 return (int) strtol(str, NULL, 10);
}

unsigned int convertirEnBase10(int binaire)
{
         char snum[20];
         // convertir en String
         itoa(binaire,snum,10);
         // combien de caracères ?
         int nc = log10((int)binaire)+1;
         int decimal = 0;
         for(int i = nc-1  ; i >= 0; i--)
         {
            decimal += char_to_int(snum[i]) * puiss( 2, (nc-1)-i);
         }
         return decimal;
}
         
int main()
{
      int binaire;
      while(true)
      {
          printf("Enter un nombre binaire ");
          scanf("%d",&binaire);
          printf ("%ld en base 2 = %ld en base 10\n",binaire, convertirEnBase10 (binaire) );
      }
      return 0;
}