Int32 StrAToI(const Char* text) Převede text na celé číslo se znaménkem. | |
Vstupní parametry |
|
Vrácená hodnota |
|
Ve svých aplikacích používejte funkci StrAToI() místo funkce jazyka C/C++ atoi().
Char* StrIToA(Char* cíl, Int32 číslo) Char* StrIToH(Char* cíl, UInt32 číslo) Převede celé číslo na text v desítkovém (funkce StrIToA()) nebo šestnáctkovém (StrIToH()) tvaru. | |
Vstupní parametry |
|
Vrácená hodnota |
|
Největší délka řetězce, do kterého funkce StrIToA() a StrIToH() uloží číslo, je definována v hlavičkovém souboru Core\System\String.h jako maxStrIToALen. Chceme-li získat šestnáctkové číslo délky 4 nebo 8 znaků - jak je obvyklé, musíme výsledný text sami doplnit zlava nulami.
Int16 StrPrintF(Char* cíl, const Char* formát, ...)
Formátovaný výstup do řetězce. V řetězci formát jsou popsána
pravidla, podle kterých jsou za ním následující proměnné zformátovány
a uloženy do řetězce cíl.
Od verze PalmOS 2.0
| |
Vstupní parametry |
|
Vrácená hodnota |
|
Za řetězcem formát (tam, kde jsou v deklaraci funkce tři tečky) následuje seznam jedné nebo více číselných, znakových nebo textových proměnných. V řetězci formát je uložen text, ve kterém jsou vloženy sekvence znaků začínající procentem (znakem '%'), které popisují, jak bude příslušná proměnná zformátována. Formátovací znaky, které používá PalmOS, jsou podmnožinou formátovacích znaků, které používá standardní funkce sprintf().
Formátovací sekvence pro jednu proměnnou začíná procentem (znakem '%'), za kterým následují znaky udávající formát výstupu a typ proměnné. Pokud si přejeme do výsledného řetězce vložit znak procento, tak jej zdvojíme ("%%"). Formátovací sekvence mohou být promíchány s textem. V takovém případě je text zkopírován do cílového řetězce a formátovací sekvence jsou nahrazeny zformátovaným obsahem proměnných. Formátovací sekvence je tedy následující:
% |
upřesnění formátu | typ proměnné |
povinné | nepovinné znaky +-hl*, číslo nebo mezera |
povinné jeden ze znaků diuxsc |
Typ proměnné
Formátovací sekvence začínají procentem a končí jedním z šesti znaků udávajících typ příslušné proměnné. Možné typy proměnných jsou v následující tabulce:
Písmeno | Význam | Typ proměnné v seznamu | Příklad |
---|---|---|---|
d nebo i | Celé číslo v desítkové soustavě se znaménkem | Int16 nebo Int32* | StrPrintF(s, "%d %d", 12, -12)dává text "12 -12" |
u | Celé číslo v desítkové soustavě bez znaménka | UInt16 nebo UInt32* | StrPrintF(s, "%u %u", 12, -12)dává text "12 65524" |
x | Celé číslo v šestnáctkové soustavě | UInt16 nebo UInt32* | StrPrintF(s, "%x %x", 12, -12)dává text "C FFF4" |
s | Řetězec | Char* | StrPrintF(s, "a=%s", "ABC")dává text "a=ABC" |
c | Znak | WChar | StrPrintF(s, "%c%c%c", 65, 66, 67)dává text "ABC" |
*) 32bitové číslo je očekáváno, pokud je mezi znaky upřesňující formát uveden znak 'l' nebo 'l'.
Upřesnění formátu
Mezi úvodním znakem procento a písmenem udávajícím typ proměnné mohou být uvedené znaky upřesňující formát. Tyto znaky by měly být - pokud jsou použity - uvedeny v pořadí, v jakém jsou uvedeny v následující tabulce. Například formátovací znak '+' (vždy bude uvedeno znaménko) musí předcházet znaku 'l' (32bitové číslo).
Písmeno | Význam | Příklad |
---|---|---|
+ | Před číslem bude vždy uvedeno znaménko, i když bude číslo kladné | StrPrintF(s, "%+d %+d", 12, -12)dává text"+12 -12" |
- | Číslo bude zarovnáno doleva. Tento modifikátor má smysl uvádět pouze tehdy, uvádíme-li ve formátovací sekvenci i počet znaků, na které číslo nebo text zarovnáváme. | StrPrintF(s, "(%-5d)", 12)dává text "( 12)" |
mezera | Před zápornými čísly je znak mínus a před kladnými je uvedena mezera | StrPrintF(s, "(%d) (%d)", 12, -12)dává text "( 12) (-12)" |
* | Číslo bude zarovnáno na délku, která je specifikována v proměnné, která v seznamu předchází proměnnou obsahující hodnotu. | StrPrintF(s, "(%*d)", 5, 12)dává text "( 12)" (zarovnaný na 5 znaků) |
číslo | Počet znaků, na které bude výsledná hodnota zarovnaná | StrPrintF(s, "(%5d)", -12)dává text "(-12 )" |
h | Proměnná je typu Int16 nebo UInt16. | StrPrintF(s, "%hd", 63335)dává text "-1" |
l nebo L | Proměnná je typu Int32 nebo UInt32. | StrPrintF(s, "%ld", 65535)dává text "65535" |
V seznamu proměnných, který následuje za formátovacím řetězcem, musí být uvedeno přesně tolik proměnných, kolik je ve formátovacím řetězci uvedeno formátovacích sekvencí. Výjimkou je použití znaku '*' mezi znaky pro upřesnění formátu - pro formátovací sekvence s tímto znakem musí být v seznamu proměnných uvedeny proměnné dvě.
Překladač gcc kontroluje použití formátovacích sekvencí a počet proměnných v příkazu StrPrintF(). Příklady několika správných použití příkazu StrPrintF() jsou v následujícím rámečku:
Int16 a = 10, b = -20, c = 30; Int32 le = 40, lf = 50; Char vysledek[100], *r="osel", *s = "ABC"; StrPrintF(vysledek, "%5d%5d%5d\n", a, b, c);// " 10 -20 30" StrPrintF(vysledek, "T=%s,R=%c,D=%lx", r, r[0], -le); // "T=osel,R=o,D=FFFFFFD8" StrPrintF(vysledek, "(%*s)", a, s); // "( ABC)" StrPrintF(vysledek, "%-4ld|%4ld", le, lf); // " 40|50 " StrPrintF(vysledek, "Toto je dlouhy %s.", ); // "Toto je dlouhy osel." StrPrintF(vysledek, "%d%%", a); // "10%" // a podobně |
Funkce StrPrintF() neprovádí žádnou kontrolu délky výsledného řetězce. Sami musíme zajistit, aby byl v cílové proměnné dostatek místa pro uložení zformátovaných proměnných.
Kromě funkce StrPrintF() je v PalmOS také funkce StrVPrintF(), která je ekvivalentem funkce vsprintf() jazyka C/C++. Její použití je však poměrně komplikované, a proto zájemce odkazuji na originální dokumentaci.
Příště se již dostaneme k popisu uživatelského rozhraní. Povíme si, jak jsou organizovány prvky formuláře a společné funkce pro manipulaci s prvky formuláře.