Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    [C++] come convertire una variabile float in stringa?

    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?

  2. #2
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    codice:
    float numero = "10123.12";
    
    char str = static_cast <char> (numero);
    In str hai la tua nuova stringa convertita

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da XWolverineX
    codice:
    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

    codice:
      float numero = (float)10123.12;
    
      char str[10];
      sprintf(str, "%6.2f", numero);

  4. #4
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    La prima non ho capito bene che intendi, per la seconda hai ragione

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

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    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?

  6. #6
    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) ?

    Giuseppe

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    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 ... ?

  8. #8
    è dichiarato come

    unsigned char Data_in[255];

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Dopo aver incluso i file

    codice:
    #include <stdio.h>
    #include <memory.h>
    il codice che segue ti puo' servire da esempio ...

    codice:
    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);

  10. #10
    grazie, problema risolto.

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.