'51 a konwersja typow

Witam, kolejny problem stanal na mojej drodze, przyzwyczajony jestem ze w C istnieja funkcje do konwersji typow jednakze w moim kompilatorze ich nie ma. Problem dotyczy konwersji floata na char. int na char robie w ten sposob:

LCDInt(int n) { unsigned char buffer[2];

int temp; temp = n;

buffer[0] = (temp/100)+48; buffer[1] = (temp/10)+48; buffer[2] = (temp%10)+48; putch_lcd(buffer[0]); putch_lcd(buffer[1]); putch_lcd(buffer[2]); }

ale co do float na char nie mam pomyslu, ktos moze mi podpowie jak ogarnac floata ?

Reply to
angel
Loading thread data ...
Reply to
invalid unparseable

Mon, 5 Apr 2004 19:04:28 +0200 jednostka biologiczna o nazwie "Przemysław Szeremiota" snipped-for-privacy@WYWALTO.icpnet.pl> wyslala do portu 119 jednego z serwerow news nastepujace dane:

Najprawdopodobniej. Tak czy inaczej buffer[2] wyjezdza za tablice

Zgadza sie.

Reply to
BLE_Maciek

Pewnego dnia angel przemówił ludzkim głosem:

Najprościej będzie chyba przerzutować na zmienną bajtową (o ile liczba się zmieści) i dopiero z niej wydzielić poszczególne znaki.

unsigned char buf[3]; float a; char b;

a=5.0; b=a; buf[2]=b/100+'0'; buf[1]=b/10+'0'; buf[0]=b%10+'0';

Reply to
Zbych

Całość powinna działać pod warunkiem, że mamy liczbę nieujemną. W przeciwnym wypadku najpierw sprawdziłbym znak i ewentualnie wyświetlił minus, a potem zmienił znak liczby na dodatni i wydzielał z niej poszczególne cyfry.

Reply to
Zbych

A nie masz w bibliotece funkcji ftoa() ?

Po co ci ten buffer ? [zreszta za krotki]

No i chyba sobie nie radzisz, bo co sie pokaze w srodku 123 ?

tak na goraco:

tempint=floor(data) ; LCDint(tempint); // ale prawdziwy, a nie tylko 3 cyfry data = (data-tempint)*10000 //wstawic zalozona dokladnosc tempint=floor(data) ; if tempint>0 { lcdchar('.') ; lcdint(tempint) ;}

J.

Reply to
J.F.

No czlowiek uczy sie cale zycie, o dziwo dziala ale pewnie przypadkiem jak piszecie :) Dziwne ze kompilator nie naplul ze element wyjezdza poza rozmiar no ale mniejsza o wiekszosc. Posiedzialem podlubalem i wydlubalem oczywiscie nie ma jeszcze funkcji do przesuwania kursora etc ale sama czesc do pokazania floata dziala :) bynajmniej widze znak za zankiem na uarcie.

char buff[80]; int n;

void piszznak(char *znak) { while( *znak ) { t6963data=*znak; printf("%c",*znak); //Na uart test *znak++; } } void piszcyfry(float flo) { n = sprintf (buff, "%0.1f", flo); //dokladnosc do dziesietnej czesci piszznak(buff); }

piszznak("Pisze "); piszcyfry(312.2);

Dzieki za pomoc i wskazowki, walcze dalej i to pewnie nie ostatni problem na jaki trafilem :)

Reg, Mariusz.

Reply to
angel

Kompilator C tego z zalozenia nie robi ! To programista ma wiedziec co robi :-)

Uprzedzam ze printf jest funkcja dosc wielka - pewnie pare kB zajmuje ..

J.

Reply to
J.F.

Pozbede sie jej przed ladowaniem programu na procka, uzywam jej na symulatorze :) Zauwazylem ze ten nieszczesny float rowniez generuje spora ilosc kodu,jednakze w asm nie moglem sobie dac rady ze zmiennym przecinkiem. Zastanawiam sie jeszcze nad jednym, skoro uzyje wyswietlacza graficznego a nie chce korzystac z brzydkiego pokracznego generatora znakow to bede musial oprogramowac kazdy nie standardowy znak ktory ma pokazac wyswietlacz ? Tzn stworzyc mapy dla cyfr 0 - 9 i pozniej w odpowiedniej funkcji gdy odbierze ona dana cyfre pchnac na wyswietlacz odpowiednie komendy i mape zamiast samej cyfry?

Pzdr, Mariusz.

Reply to
angel

Chyba lepiej znak++; //- bez tej * Gwiazdka w zasadzie nie przeszkadza, ale troche zaciemnia.

Krzysiek Rudnik

Reply to
Krzysztof Rudnik

51 czy 52 ? Bo na dzien dobry dosc spora ilosc ram zuzywasz :-)

na test moze byc, ale jeden znak to putc,putch lub putchar

J.

Reply to
J.F.

angel napisal(a):

A jestes pewien, ze potrzebujesz floatow? Z mojego doswiadczenia wynika, ze w znakomitej wiekszosci przypadkow mozesz je ominac....

Reply to
Marcin E. Hamerla

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.