Lo siguiente ya seria usar un unsigned int64 como entrada y un array de caracteres como salida:
Código C:
Ver originalvoid DecimalToBinaryString(uint64_t x, char* binary, int sizeMax, int *overflow)
{
int digito;
int contador = sizeMax;
char *aux;
if(sizeMax > 0){
if(aux != NULL){
*overflow=0;
do{
contador--;
if(contador < 0){
*overflow=1;
}else{
//Obtenemos el valor del digito a escribir(0 ó 1)
digito = x % 2;
//Dividimos el numero por 2 para seguir
x /= 2;
//Añadimos el nuevo digito al binario
aux[contador] = digito + 0x30;
}
}while (x > 0 && *overflow != 1);
strncpy(binary
, &aux
[contador
], sizeMax
-contador
); }
}
}
y para probarla:
Código C:
Ver originalchar binari[100];
uint64_t valor=11234567899999999901;
DecimalToBinaryString(valor, binari, sizeof(binari), &error);
if(error == 1)
printf("Se desbordo el valor maximo posible para un entero binario.\n"); else
printf("%I64u = %s\n", valor
, binari
);
Esto nos permitiria obtener una cadena con el binario de un numero muy muy grande jejeje.