PDA

Visualizza la versione completa : [C++] Come convertire una variabile float in stringa?


giuseppe74
21-10-2005, 19:05
Ciao,

ho fatto un programma in Visual C++ che comunica in seriale con uno strumento di misura, le misure effettuate dallo strumento e inviate al PC sono in virgola mobile. Io acquisisco le misure su quattro byte in esadecimale, come faccio a convertire questi quattro byte, che leggo correttamente, in stringa, in modo da poter salvare il dato su un file di testo?

XWolverineX
22-10-2005, 15:44
float numero = "10123.12";

char str = static_cast <char> (numero);

In str hai la tua nuova stringa convertita

oregon
22-10-2005, 16:17
Originariamente inviato da XWolverineX


float numero = "10123.12";

char str = static_cast <char> (numero);

In str hai la tua nuova stringa convertita


Scusa ma non credo che le due linee siano corrette ...

la prima perche' numero e' un float e la costante dopo l'uguale una stringa ...

la seconda perche' dichiari str come singolo char ...

Il codice potrebbe essere



float numero = (float)10123.12;

char str[10];
sprintf(str, "%6.2f", numero);

XWolverineX
22-10-2005, 23:50
La prima non ho capito bene che intendi, per la seconda hai ragione

float numero = "10123.12";
char str[] = static_cast <char> (numero);

oregon
23-10-2005, 12:23
Originariamente inviato da XWolverineX
La prima non ho capito bene che intendi, per la seconda hai ragione

float numero = "10123.12";
char str[] = static_cast <char> (numero);

Se scrivi

float numero

la variabile numero e' numerica in virgola mobile singola precisione ...

Ma quello che scrivi dopo l'uguale e' una costante stringa e non un numero ...

Devi scrivere

float numero = 10123.12;

*senza* le virgolette ...

Ma anche la scrittura

char str[] = static_cast <char> (numero);

e' sbagliata ...

Ma le compili le linee di codice che proponi? Non ti danno nessun errore?

giuseppe74
23-10-2005, 16:53
Quello che dite mi è chiaro,
il problema è che io non leggo direttamente il valore float della misura (cioè non leggo 3376,27 per esempio) ma leggo una cosa del tipo:
Data_in[26]=4C
Data_in[27]=2F
Data_in[28]=55
Data_in[29]=11
su quattro byte in esadecimale, perchè lo strumento di misura me li invia così in byte.
Come faccio a convertire 4C2F5511 (4 byte) in 3376,27 (numero a virgola mobile) :confused: ?

Giuseppe

oregon
23-10-2005, 17:47
Che il valore fosse diviso in byte non lo avevi specificato ...

Il fatto che sia ricevuto in esadecimale non ha importanza (in realta' non ha senso perche' l'esadecimale e' solamente un metodo di rappresentazione del dato non una sua caratteristica ...).

La cosa importante e' capire il tipo di dato del vettore in cui ricevi il dato ... di che tipo è Data_in ? Ad esempio, è dichiarato come

unsigned char Data_in[100];

?

Oppure ... ?

giuseppe74
23-10-2005, 19:58
è dichiarato come

unsigned char Data_in[255];

oregon
23-10-2005, 20:11
Dopo aver incluso i file



#include <stdio.h>
#include <memory.h>


il codice che segue ti puo' servire da esempio ...



unsigned char Data_In[255];
float f;

Data_In[26]=0xC3;
Data_In[27]=0xF5;
Data_In[28]=0x48;
Data_In[29]=0x40;

memcpy(&f, &Data_In[26], sizeof(float));

printf("%f\n", f);

giuseppe74
25-10-2005, 18:47
grazie, problema risolto. :ciauz:

Loading