Stránka 1 z 1
funkce utoa v XC8
Napsal: 21 dub 2015, 16:11
od Ladin
Ahoj, mám funkci utoa, která převádí číslo na jednotlivá čísla(ASCII znaky):
Kód: Vybrat vše
unsignet int cislo = 123;
char buf[10];
utoa(buf, cislo, 10);
takto bude BUF[] = 1,2,3
ale já potřebuji aby BUF[] = 0,0,0,0,0,0,0,1,2,3
pomooooc!

Napsal: 21 dub 2015, 16:53
od berk
Myslíš takto?
Kód: Vybrat vše
int main(void)
{
unsigned int cislo = 123;
char buf[10];
snprintf(buf, 9, "%09d", cislo);
printf("%s\n",buf);
getchar();
return 0;
}
Napsal: 22 dub 2015, 08:31
od Ladin
No.... nejsem si jistý, snprintf to nezná, co je to za knihovnu?
Můj případ.... mám funkci pro zobrazení čísla na lcd:
Kód: Vybrat vše
void writenum (unsigned int cislo, size_t size, unsigned int x1, unsigned int y1,unsigned char col1, unsigned char col2){
char buf[10];
utoa(buf, cislo, 10);
writetxt(buf,size,x1,y1,col1,col2);
}
a pokud klesne např. číslo ze 100 na 99, zobrazí to 990, proto potřebuji, aby se zobrazovalo číslo s nulami před... 001,002,099,100
jde to nějak?
Napsal: 22 dub 2015, 09:16
od berk
Měla by to být knihovna
zná alespoň sprintf ?
Napsal: 22 dub 2015, 09:34
od AB1
pokud klesne např. číslo ze 100 na 99, zobrazí to 990
Ta nula ti tam zbude po předešlém čísle.
Před zobrazením vymaž řádek (vyplň mezerama).
Napsal: 22 dub 2015, 10:30
od Ladin
...tak knihovnu stdio mam, ale zna pouze sprintf...
...to já vím, že to zobrazuje 990, protože tam zbyla nula ze 100, ale mazat před každým zobrazením to nechci, ptže to snižuje rychlost zobrazení na polovinu a ta je v mém případě klíčová... navíc potřebuji aby jednotky, desítky i stovky byly stále na stejné pozici...
myslel jsem(a h.... věděl) ... neexistuje matematické řešení?
Napsal: 22 dub 2015, 11:12
od mikollar
sprintf je nenazrana funkcia na pamat a rychlost. Ak vies max rozsah cisla a nie je nejako velky, riesil som to tak ze som postupne odcitaval od cisla - 1000, 100, 10, 1. Potom pocet odcitavani + '0' ti da znak v ascii a ten som rovno vykreslil na LCD.
Ak som chcel pevne pozicie tak som len dal podmienku napr pri 1000 mieste ak je stovkova pozicia 0 zobraz namieste tisicok medzeru atd...
Je to o dost rychlejsie ako sprintf a menej narocne na pamat
Napsal: 22 dub 2015, 11:33
od Ladin
Trochu jsem se bál, že to budu muset takle nějak udělat

Napsal: 22 dub 2015, 11:50
od Ladin
Tak dobrý už jsem to

... pro čísla od 0 do 9999 stačí:
Kód: Vybrat vše
void writenum (unsigned int cislo, size_t size, unsigned int x1, unsigned int y1,unsigned char col1, unsigned char col2){
unsigned char buf[10];
cislo = cislo + 10000;
utoa(buf, cislo, 10);
buf[0] = ' ';
writetxt(buf,size,x1,y1,col1,col2);