Ver Mensaje Individual
  #11 (permalink)  
Antiguo 07/04/2015, 02:27
aguml
 
Fecha de Ingreso: febrero-2015
Mensajes: 404
Antigüedad: 9 años, 8 meses
Puntos: 3
Respuesta: Función decimal -> binario

Lo siguiente ya seria usar un unsigned int64 como entrada y un array de caracteres como salida:
Código C:
Ver original
  1. void DecimalToBinaryString(uint64_t x, char* binary, int sizeMax, int *overflow)
  2. {
  3.    int digito;
  4.    int contador = sizeMax;
  5.    char *aux;
  6.  
  7.    if(sizeMax > 0){
  8.       aux=malloc(sizeMax);
  9.       if(aux != NULL){
  10.          memset(aux,0,sizeMax);
  11.          memset(binary,0,sizeMax);
  12.          *overflow=0;
  13.  
  14.          do{
  15.             contador--;
  16.             if(contador < 0){
  17.                *overflow=1;
  18.                memset(aux,0,sizeMax);
  19.             }else{
  20.                //Obtenemos el valor del digito a escribir(0 ó 1)
  21.                digito = x % 2;
  22.                //Dividimos el numero por 2 para seguir
  23.                x /= 2;
  24.                //Añadimos el nuevo digito al binario
  25.                aux[contador] = digito + 0x30;
  26.             }
  27.          }while (x > 0 && *overflow != 1);
  28.          strncpy(binary, &aux[contador], sizeMax-contador);
  29.          free(aux);
  30.       }
  31.    }
  32. }

y para probarla:
Código C:
Ver original
  1. char binari[100];
  2. uint64_t valor=11234567899999999901;
  3. DecimalToBinaryString(valor, binari, sizeof(binari), &error);
  4. if(error == 1)
  5.    printf("Se desbordo el valor maximo posible para un entero binario.\n");
  6. else
  7.    printf("%I64u = %s\n", valor, binari);

Esto nos permitiria obtener una cadena con el binario de un numero muy muy grande jejeje.

Última edición por aguml; 07/04/2015 a las 02:33