Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it L'avatar di buba88
    Registrato dal
    Feb 2004
    Messaggi
    538

    [C] - Convertire una long in un array di caratteri

    Il titolo è abbastanza esplicativo: devo convertire una variabile long in un array di char, come faccio?

    mi hanno consigliato di usare la funzione snprintf, ma nn ho trovato dei riferimenti su come usarla.

  2. #2
    Si usa come printf, aggiungendo la stringa destinazione come primo parametro.

    Non ricordo di preciso, ma per stampare a schermo si usava qualcosa del tipo:

    codice:
    printf ("%l", variabilelong);
    Per "stampare" su stringa usi:

    codice:
    sprintf (variabilestringa, "%l", variabilelong);
    Folle e' l'uomo che parla alla luna.
    Stolto chi non le presta ascolto.

  3. #3
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    c'è la funzione ltoa(Long To Array) http://www.cplusplus.com/ref/cstdlib/ltoa.html

    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  4. #4
    ti fornisco qualcosa di studio:
    codice:
    char *ToString(double num)//converte un intero o un double in una stringa
    {     
       
       char *temp;
       temp = calloc(15, sizeof(char));
       if (num == .0)
           return "0";
       
       if (isDouble(num))
           sprintf(temp, "%f", num);
       else
           sprintf(temp, "%d", (int)num); 
    
       return temp; 
    }
    
    int isDouble(double arg)
    {
       int exp, result;
    
       for (exp = 1; exp <= 6; exp++) {
    
           result = (int)pow(10, exp); 
     
           if ((int)(arg * result) % 10)
              return 1;//errore       
       }
    
       return 0;
    }
    l'ho scritta per convertire int long unsigned e double in una stringa.
    Ma la si deve un po' adeguare al caso specifico.
    Ciao
    Nulla, ma e' sempre qualcosa.

  5. #5
    Utente di HTML.it L'avatar di buba88
    Registrato dal
    Feb 2004
    Messaggi
    538
    Ok grazie a tutti, ho provato a scrivermi una funzione da me, si basa perlopiù sulla matematica. l unica differenza è che invece che un array di char converte in un arry di int(dove ogni elemento è una cifra da 0 a 9):

    codice:
    #include <math.h>
    void LngToArray(int *p,long n){
    	int E = 9, j = 0, i = 0;
    
    	for (i=9;i>=0;--i){
    		j = (int)(n / pow(10,i));
    		*(p+i) = j;
    		n = n - ((int)pow(10,i) * j);
    	}
    }
    si richiama passando come primo argomento il puntatore al primo elemento di un array di int.

    Che ne pensate?

  6. #6
    Ti consiglio di studiare le funzioni che ho fornito, come l'hai scritta tu violi l'accesso alla memoria.
    Nulla, ma e' sempre qualcosa.

  7. #7
    codice:
    #include <stdlib.h>
    
    void LngToArray(int p[], long n){
      int j, i;
      long tmp = n, count = 0;
      while (tmp != 0){
          tmp = tmp / 10;
          count++;
      }
     
        
      for (i= count - 1; n != 0; i--){
         j = n - ( n / 10) * 10;
         p[i]  = j;
         n = n / 10;
      }
    }
    
    main()
    {
       int  p[10], i;
       
       long t = 3202;
     
       LngToArray(p, t);
       
       
       for(i = 0; i <= 3; i++)
           printf("%d ", p[i]);
       
       return 0;
    }
    prova cosi.
    Nulla, ma e' sempre qualcosa.

  8. #8
    Utente di HTML.it L'avatar di buba88
    Registrato dal
    Feb 2004
    Messaggi
    538
    scusa che vuol dire che violo l'accesso alla memoria ?!?!?!
    ti riferisci al fatto che uso un puntatore al vettore e che il vettore in teoria può essere più piccolo del necessario?

    beh è compito di chi usa la funzione assicurarsi che il puntatore punti a un vettore di almeno 10 elementi.

    Peraltro visto che questa funzione l ho scritta per uso personale, di certo nn sarò cosi fesso da passare un vettore più piccolo.

  9. #9

    Intendo che in fase di esecuzione accede alla memoria in maniera illegale e quindi viene bloccato dal sistema.
    Cmq se ti piace cosi....
    Pero le prime due funzioni che ho scritto sono interessanti.
    Ti consiglio spassionatamente di osservarle e magari anche migliorarle.
    Nulla, ma e' sempre qualcosa.

  10. #10
    Utente di HTML.it L'avatar di buba88
    Registrato dal
    Feb 2004
    Messaggi
    538
    Originariamente inviato da maurizio2

    Intendo che in fase di esecuzione accede alla memoria in maniera illegale e quindi viene bloccato dal sistema.
    Cmq se ti piace cosi....
    Pero le prime due funzioni che ho scritto sono interessanti.
    Ti consiglio spassionatamente di osservarle e magari anche migliorarle.
    che intendi con "e quindi viene bloccato dal sistema" ?

    la funzione l ho provata e funziona.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.