Dalsi zahada v C -> Prevod long int na string
Michal Gregor
a2x1nptda8 na email.cz
Pondělí Červenec 25 17:11:37 CEST 2011
A jeste prevod byte na string (ted jsem to dopsal, nemam to vyzkousene). Bez
deleni, bez cyklu:
//***********************************************************
// Převod čísel na řetězec, pracuje v rozsahu 0-255
// Počateční nuly zahazuje
static void Vypis_Byte( u08 Vstup_Byte, * u08 p_Vstup_Retezec, Boolean
Vstup_Je_Signed) {
auto Boolean Je_Prvni_Cislice;
// Znaménko
if ( Vstup_Je_Signed ) {
Vstup_Byte = -Vstup_Byte;
*p_Vstup_Retezec = '-';
++p_Vstup_Retezec;
}
// Stovky
if (Vstup Byte >= 200) {
Vstup_Byte -= 200;
*p_Vstup_Retezec = '2';
++p_Vstup_Retezec;
Je_Prvni_Cislice = True;
}
else if (Vstup Byte >= 100) {
Vstup_Byte -= 100;
*p_Vstup_Retezec = '1';
++p_Vstup_Retezec;
Je_Prvni_Cislice = True;
}
else {
Je_Prvni_Cislice = False;
}
// Desítky
if (Vstup Byte >= 90) {
Vstup_Byte -= 90;
*p_Vstup_Retezec = '9';
++p_Vstup_Retezec;
Je_Prvni_Cislice = True;
}
else if (Vstup Byte >= 80) {
Vstup_Byte -= 80;
*p_Vstup_Retezec = '8';
++p_Vstup_Retezec;
Je_Prvni_Cislice = True;
}
else if (Vstup Byte >= 70) {
Vstup_Byte -= 70;
*p_Vstup_Retezec = '7';
++p_Vstup_Retezec;
Je_Prvni_Cislice = True;
}
else if (Vstup Byte >= 60) {
Vstup_Byte -= 60;
*p_Vstup_Retezec = '6';
++p_Vstup_Retezec;
Je_Prvni_Cislice = True;
}
else if (Vstup Byte >= 50) {
Vstup_Byte -= 50;
*p_Vstup_Retezec = '5';
++p_Vstup_Retezec;
Je_Prvni_Cislice = True;
}
else if (Vstup Byte >= 40) {
Vstup_Byte -= 70;
*p_Vstup_Retezec = '40';
++p_Vstup_Retezec;
Je_Prvni_Cislice = True;
}
else if (Vstup Byte >= 30) {
Vstup_Byte -= 30;
*p_Vstup_Retezec = '3';
++p_Vstup_Retezec;
Je_Prvni_Cislice = True;
}
else if (Vstup Byte >= 20) {
Vstup_Byte -= 20;
*p_Vstup_Retezec = '2';
++p_Vstup_Retezec;
Je_Prvni_Cislice = True;
}
else if (Vstup Byte >= 10) {
Vstup_Byte -= 10;
*p_Vstup_Retezec = '1';
++p_Vstup_Retezec;
Je_Prvni_Cislice = True;
}
else if ( Je_Prvni_Cislice ) {
// Menší než deset a už máme číslici ve výstupu, vypsat nulu
*p_Vstup_Retezec = '0';
++p_Vstup_Retezec;
}
// Jednotky
*p_Vstup_Retezec = Vstup_Byte + 48;
++p_Vstup_Retezec;
}
Michal Gregor
----- Original Message -----
From: "Michal Gregor" <a2x1nptda8 na email.cz>
To: "HW-News" <hw-list na list.hw.cz>
Sent: Monday, July 25, 2011 4:56 PM
Subject: Re: Dalsi zahada v C -> Prevod long int na string
Takze jsem si nasel par prikladu na prvod cisel do retezce. Je to hruza,
nedivim se ze jsou dnesni programy tak pomale. Nechapu proc se pouziva jedna
funkce pro desitkove a hexa cisla. Prevod hex. cisel je jednoduchy. Je
zbytecne do toho cpat nejake cykly, nebo dokonce deleni. V asembleru to mam
takto:
;*********************************************************
;Tady se vypíše na LCD spodní půlka W
;Vstup W
; Výstup LCD přes W
Spodni_Pulka_Byte_Na_LCD
andlw 15
addlw -10
skpnc
goto Hexa_Znaky
addlw 58
goto Lcd
Hexa_Znaky
addlw 65
goto Lcd
Spotreba datove pameti nula, program par byte, cyklu minimum.
(Zlaty asembler.) Dnes rano jsem se rozhodl ze se vykaslu na printf a nejak
to optimalizuji. To jsem nemel delat. V jinem programu jsem dopsal par radek
a po kompilaci jsem zjistil ze prestaly fungovat nekter funkce printf(),
program se nekam zahadne zabiha ve funkci printf. Kompilace probehne, ale
pri krokovani pogramu se program nekam zatoula na radku s sprintf(). Upravy
jsem pritom provadel v jine casti programu. PIC18 STD me asi nema rad....
Michal Gregor
_______________________________________________
HW-list mailing list - sponsored by www.HW.cz
Hw-list na list.hw.cz
http://list.hw.cz/mailman/listinfo/hw-list
Další informace o konferenci Hw-list