Pagina 1 di 1

[C] convertire numeri in stringhe

Inviato: martedì 10 aprile 2018, 16:18
da DeN96
Ciao a tutti, ho scritto un client-server che comunica tramite socket. Ad un certo momento devo inviare un numero ad un client e devo scriverlo in un buffer.
Ho provato ad utilizzare funzioni come snprintf ma non ho ottenuto risultati positivi... Cerco di spiegarmi meglio trascrivendo i frammenti di codice del server e del client

Lato server: "corr->n_msgs" contiene il numero intero che devo inviare al client. Converto in questo modo il numero intero e poi lo invio

Codice: Seleziona tutto

char *str;
str=calloc(4, sizeof(char));
*str=(char)(corr->n_msgs);
Il client riceve tutto correttamente e poi trasforma il buffer in un numero in questo modo:

Codice: Seleziona tutto

size_t nmsgs = *(size_t*)(msg.data.buf);
Non posso modificare il client ma solo il server... non riesco a capire come mai per numeri maggiori di zero il tutto funziona ma quando corr->n_msgs è uguale a zero il client con quell'operazione trasforma il numero 0 in un altro numero.

Re: [C] convertire numeri in stringhe

Inviato: mercoledì 11 aprile 2018, 8:00
da gila75
Ciao, se non ricordo male,
C'e' itoa() per convertire int-->str.

Re: [C] convertire numeri in stringhe

Inviato: mercoledì 11 aprile 2018, 8:15
da TommyB1992
si c'è itoa e se non c'è, puoi facilmente trovarlo su google.

Non riesco a capire come faccia a convertire qualcosa:
char *str;
str=calloc(4, sizeof(char));
*str=(char)(corr->n_msgs);
Crei uno spazio di memoria e ci butti dentro n_msgs convertito a char? il char di 7 è un carattere chiamato "BEL", mentre lo zero è NULL, ecco perchè probabilmente hai problemi di conversione.

Se poi qualcuno mi smentisce ritiro ciò che ho detto.

Re: [C] convertire numeri in stringhe

Inviato: mercoledì 11 aprile 2018, 13:23
da gila75
Ma scusa perchè sprintf non ti funziona ?

Codice: Seleziona tutto

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

int main () {
	char str[80];
	int a=1975;	
	int len;
	sprintf(str, "%d", a);
	printf ("stringa risultante: %s\n",str);
	len=strlen(str);
	printf ("lunghezza stringa=%d\n",len);
	return(0);
}
out:

Codice: Seleziona tutto

gila@gila-pc:~/Scrivania$ ./xx
stringa risultante: 1975
lunghezza stringa=4
gila@gila-pc:~/Scrivania$ 
Credo che faccia al caso tuo.
qui invece:

Codice: Seleziona tutto

char *str;
str=calloc(4, sizeof(char));
*str=(char)(corr->n_msgs);
non capisco cosa vuoi fare. In poche parole riservi 4 spazi char, poi cerchi di fare un cast:

Codice: Seleziona tutto

*str=(char)(corr->n_msgs)
ma a me non funziona.
Itoa, forse è deprecato.