- Messaggi: 353
- Ringraziamenti ricevuti 8
HELP
9 Anni 11 Mesi fa - 9 Anni 11 Mesi fa #1
da elpablito
HELP è stato creato da elpablito
Buon giorno
C'è qualcuno che sa di C e mi dice dove è la Va.......ta
con un float non ci ho mai giocato e non trovo il bandolo
#include "stdio.h" questo l'ho incluso
char buff[10]; il buffer è così definito
ypr[0] *= 180; variabile supponiamo sia 0.03311 naturalmente è tipo f
sprintf(buff,"%f",ypr[0]); istruzione
Mi aspettavo di vedere:
buff[0] = 0
buff[1] = .
buff[2] = 0
buff[3] = 3
buff[4] = 3
buff[5] = 1
buff[6] = 1
invece ho sempre
buff[0] = 0x00
buff[1] = 0x00
buff[2] = 0x33
buff[3] = 0x00
buff[4] = 0x00
buff[5] = 0x00
buff[6] = 0x00
Grazie
Ciao a tutti
Paolo
C'è qualcuno che sa di C e mi dice dove è la Va.......ta
con un float non ci ho mai giocato e non trovo il bandolo
#include "stdio.h" questo l'ho incluso
char buff[10]; il buffer è così definito
ypr[0] *= 180; variabile supponiamo sia 0.03311 naturalmente è tipo f
sprintf(buff,"%f",ypr[0]); istruzione
Mi aspettavo di vedere:
buff[0] = 0
buff[1] = .
buff[2] = 0
buff[3] = 3
buff[4] = 3
buff[5] = 1
buff[6] = 1
invece ho sempre
buff[0] = 0x00
buff[1] = 0x00
buff[2] = 0x33
buff[3] = 0x00
buff[4] = 0x00
buff[5] = 0x00
buff[6] = 0x00
Grazie
Ciao a tutti
Paolo
Ultima Modifica 9 Anni 11 Mesi fa da elpablito.
Si prega Accedi o Crea un account a partecipare alla conversazione.
- elpablito
- Autore della discussione
- Platinum Member
Riduci
Di più
9 Anni 11 Mesi fa #2
da elpablito
Risposta da elpablito al topic HELP
Buon giorno
Era evidente che sprintf non era idonea allo scopo, dava i numeri. Dopo un po' di tempo perso sfrugugliando internet ho scoperto che dovevo usare invece ftoa() che sebbene non sia codificata nelle librerie standard, tutti ne parlano come cosa fatta. L'ha trovata per primo Ste su un blog di Stellaris TI, é vero che aveva un paio di errorini, ma una volta corretti, mi sembra vada bene. Provare per credere. La riporto quì visto che potrebbe servire a qualcuno con lo stesso problema .
f è il numero da convertire in stringa.
*buf e il nome del vettore che conterrà i caratteri della stinga.
ix è il numero dei caratteri numerici che converte, vedi il for(ix = 1; ix<8; ix++) verso la fine, attualmente converte 8 caratteri
void ftoa(float f,char *buf){
int pos=0, ix, dp, num;
if (f<0){
buf[pos++]='-';
f = -f;
}
dp=0;
while (f>=10.0){
f=f/10.0;
dp++;
}
for (ix = 1; ix<8; ix++) {
num = f;
f=f-num;
if (num>9)
buf[pos++]='#';
else
buf[pos++]='0'+num;
if (dp==0) buf[pos++]='.';
f=f*10.0;
dp--;
}
}
Salutiamo la banda
Paolo
Era evidente che sprintf non era idonea allo scopo, dava i numeri. Dopo un po' di tempo perso sfrugugliando internet ho scoperto che dovevo usare invece ftoa() che sebbene non sia codificata nelle librerie standard, tutti ne parlano come cosa fatta. L'ha trovata per primo Ste su un blog di Stellaris TI, é vero che aveva un paio di errorini, ma una volta corretti, mi sembra vada bene. Provare per credere. La riporto quì visto che potrebbe servire a qualcuno con lo stesso problema .
f è il numero da convertire in stringa.
*buf e il nome del vettore che conterrà i caratteri della stinga.
ix è il numero dei caratteri numerici che converte, vedi il for(ix = 1; ix<8; ix++) verso la fine, attualmente converte 8 caratteri
void ftoa(float f,char *buf){
int pos=0, ix, dp, num;
if (f<0){
buf[pos++]='-';
f = -f;
}
dp=0;
while (f>=10.0){
f=f/10.0;
dp++;
}
for (ix = 1; ix<8; ix++) {
num = f;
f=f-num;
if (num>9)
buf[pos++]='#';
else
buf[pos++]='0'+num;
if (dp==0) buf[pos++]='.';
f=f*10.0;
dp--;
}
}
Salutiamo la banda
Paolo
Si prega Accedi o Crea un account a partecipare alla conversazione.
- elpablito
- Autore della discussione
- Platinum Member
Riduci
Di più
- Messaggi: 353
- Ringraziamenti ricevuti 8
9 Anni 11 Mesi fa #3
da stainless
int main void{
while(1){
eat();
drink();
have_fun();
ride();
}
}
Risposta da stainless al topic HELP
Usi questa funzione per visualizzare numeri float su display? puoi postare un esempio?
int main void{
while(1){
eat();
drink();
have_fun();
ride();
}
}
Si prega Accedi o Crea un account a partecipare alla conversazione.
- stainless
- Premium Member
Riduci
Di più
- Messaggi: 127
- Ringraziamenti ricevuti 14
9 Anni 11 Mesi fa #4
da elpablito
Risposta da elpablito al topic HELP
La funzione serve a convertire un float in stringa. Quando hai la stringa la puoi mandare a display come vuoi, dipende dal display che usi.
Per fare una prova definisci un float
#define PI 3,14151
quindi un contenitore per il float
char buffer[10];
quindi la funzione
ftoa(PI,buffer);
se vai a vedere il contenuto di buffer troverai:
0x33 0x22 0x31 0x34 0x31 0x35 0x30 0x39 0x39 se nel for hai un 8 pari a 8 cifre
poi manda buffer a display
Modifica poi il numero di cifre e, o il numero, magari con il segno, così vedi come funzia
Spero di esser stato chiaro
Ciao
Paolo
Per fare una prova definisci un float
#define PI 3,14151
quindi un contenitore per il float
char buffer[10];
quindi la funzione
ftoa(PI,buffer);
se vai a vedere il contenuto di buffer troverai:
0x33 0x22 0x31 0x34 0x31 0x35 0x30 0x39 0x39 se nel for hai un 8 pari a 8 cifre
poi manda buffer a display
Modifica poi il numero di cifre e, o il numero, magari con il segno, così vedi come funzia
Spero di esser stato chiaro
Ciao
Paolo
Si prega Accedi o Crea un account a partecipare alla conversazione.
- elpablito
- Autore della discussione
- Platinum Member
Riduci
Di più
- Messaggi: 353
- Ringraziamenti ricevuti 8
Moderatori: Mauro Laurenti, StefA
Registrati al sito
Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.