CCS printf()
Nya'ri Viktor
office at flexelec.hu
Mon Jul 11 18:18:14 CEST 2005
>>printf("%lu",valami) müködik int32-re is, DE!!!
>>Ha pl. valami = 0xFFFFFF
>>és azt írom, hogy printf("%lu",valami), akkor kiir 16777215-t
>>de ha azt írom, hogy printf("%5lu",valami), akkor is 16777215-t ir ki,
>>meg ha azt írom, hogy printf("%2lu",valami), akkor is 16777215-t ir ki!
>>Szal a karakter-szám vezérlés nem müxik; mindig az értékéhez igazitja.
>
>
> Ez igy is van rendjen. Ha nagyobb a szam, akkor nem fogja levagni, hanem
> kimegy minden digit.
> Stringnel lehet csak ilyet.
Nemtom, mi az ANSI C szabvány, de a CCS (ami _nem_annyira_ ANSI
tudomásom szerint) pl. az int16-nál bizony levágja, úgy ahogy írtam.
Mert ha van pl. egy szám, ami mondjuk 0..1023 tartományban mozoghat,
annak ugye már nem elég az int8, használnom kell az int16-t; viszont ha
mondjuk LCD-re akarom kiiratni, akkor meg elég a 4 digit, és lehet hogy
nincs 5 digitnyi helyem, csak 4. Szal ilyenkor bizony jó ez a funkció,
és a CCS-nél int8-nál és int16-nál ez müködik is; akkor szerintem
logikus lenne, hogy int32-nél is így müködjön, de a manualja is ezt írja:
Format:
The format takes the generic form %wt where w is optional and may be
1-9 to specify how many characters are to be outputted, or 01-09 to
indicate leading zeros or 1.1 to 9.9 for floating point. t is the type
and may be one of the following:
> Na ez a nemjo...De lehet hogy a manualban benne van hogy a mezoszelesseg
> csak 1 karakter lehet...
> Logikus is lenne.
> Mert vagy igy irjuk mindig: (10 mezoszelesseg 0 karakterrel feltoltve)
> %010lu
> vagy igy 1 karakter mezoszelesseggel (1 mezoszelesseg 0 karakterrel
> feltoltve):
> %10lu
>
> Maskulonben nem lehet eldonteni.
>
Igen, a beidézett szöveg szerint 1 karakter a mezőszélesség; de ha már
int32-re is mukodnie kellene a dolognak (az én logikám szerint), akkor
kitalálhatnának valami ujabb formulát, ahol a 10 karakteres kiirást is
lehetne specifikálni, nem?
Tényleg, ANSI-éknál mi a szabvány erre? Hogy kell ezt megadni?
>>kiirast, ami 8 karakter) vezeto nullákkal. Szal vannak még hibái, na...
>
> Nembiztos hogy minden hiba ami annak latszik. :)
Csak azt ne mondd, hogy ez feature :)
Szerintem ez kimondottan _hiba_; de mentségükre legyen mondva, hogy
folyamatosan javitgatják.
>>Huh, ezt nem gondoltad komolyan, ugye?
>>
>>pl.
>>1000000(dec) = 0xF4240
>>Namost 0xF4240 >> 16 az ugye 0xF
>>0xF = 15(dec)
>>0x4240 = 16960(dec)
>>Ha úgy iratom ki, ahogy írod, akkor abból lesz a kijelzőn 1516960 az
>>1000000 helyett :(
> Az a durva hogy szamomra teljesen jo megoldasnak tunt. Fel sem merult
bennem
> hogy hulyeseg.
> hexaban jo lenne... valszeg azert.
>
Hát igen, hexaban jó lenne, de nekem decimálisban kell.
> Nemértem... Viktor, eddig mit próbáltál???????
> Azt nehezen kepzelem hogy ultel a kod felett, es panikoltal hogy
vajon mivel
> irjal ki, es nem probaltad ki a ket lehetseges kezenfekvo variaciot. :)))
De bizony, így történt.
Mert a "Longs in the printf may be 16 or 32 bit." szoveget nem vettem
észre, és ha az int8-nak %u, az int16-nak %lu, akkor gondoltam, hogy az
int32-nek is van valami saját szintaktikája, de nem találtam sehol.
Bevallom töredelmesen, előre nem próbáltam ki; gondoltam megkérdezem az
okosabbakat :)
V.
More information about the Elektro
mailing list