PDA

Visualizza la versione completa : [C] - Convertire una long in un array di caratteri


buba88
06-04-2005, 21:19
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.

dekdek
06-04-2005, 21:30
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:



printf ("%l", variabilelong);


Per "stampare" su stringa usi:



sprintf (variabilestringa, "%l", variabilelong);

netarrow
06-04-2005, 22:12
c'è la funzione ltoa(Long To Array) http://www.cplusplus.com/ref/cstdlib/ltoa.html

:ciauz:

maurizio2
07-04-2005, 17:06
ti fornisco qualcosa di studio:


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 :ciauz:

buba88
07-04-2005, 18:06
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):



#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?

maurizio2
07-04-2005, 18:46
Ti consiglio di studiare le funzioni che ho fornito, come l'hai scritta tu violi l'accesso alla memoria.

maurizio2
07-04-2005, 19:07
#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.

buba88
07-04-2005, 19:47
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.

maurizio2
07-04-2005, 20:03
:)
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.

buba88
07-04-2005, 20:07
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.

Loading