Premium

Získejte všechny články mimořádně
jen za 49 Kč/3 měsíce

Programování pro PalmOS počítače krok za krokem (29)

Dnes budeme pokračovat v popisu funkcí PalmOS pracujících s řetězci. Popis funkcí dokončíme čtyřmi funkcemi pro převod textů na čísla a čísel na text.
Int32 StrAToI(const Char* text)

Převede text na celé číslo se znaménkem.

Vstupní parametry
  • text - text, který dekódujeme
Vrácená hodnota
  • číslo, které je v řetězci text
  • 0 - pokud řetězec text neobsahuje číslo (nebo pokud je v něm číslo 0)

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
  • cíl - proměnná, do které bude číslo uloženo
  • číslo - 32bitové číslo, které převádíme na text
Vrácená hodnota
  • ukazatel na řetězec cíl

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
  • cíl - řetězec, do kterého bude výsledný text uložen
  • formát - text doplněný o formátovací znaky
  • ... - seznam proměnných, jejichž hodnoty budou do řetězce cíl vloženy
Vrácená hodnota
  • výsledná délka řetězce cíl (počet uložených znaků)

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átutyp 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ísmenoVýznamTyp proměnné v seznamuPří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ísmenoVýznamPří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.

Autor:
  • Nejčtenější

Ukradené auto s AirTagem si našel, ale od policie dostal vynadáno

4. května 2024  7:02

Vyjít ráno před dům a nenajít tam svůj vůz je noční můrou každého majitele. Do takové...

O2 mění identitu. Vrací se 26 let starý legendární slogan předchůdce

30. dubna 2024  14:13

Operátor O2 se bude prezentovat trochu jinak než doteď. Změna je to spíš evoluční, ale rozdílů si...

{NADPIS reklamního článku dlouhý přes dva řádky}

{POPISEK reklamního článku, také dlouhý přes dva a možná dokonce až tři řádky, končící na tři tečky...}

Nový vědecký objev zdvojnásobí životnost baterií. Klíč je v nabíjení

4. května 2024

Premium Nový způsob nabíjení lithium-iontových baterií může podle studie německých vědců zdvojnásobit...

Pozor na tuto fintu. Zneužívají produkty Applu, aby se vám vetřeli do domu

2. května 2024  7:02

Zazvoní zvonek a na druhé straně se ozve neznámý člověk. Svým způsobem nic neobvyklého, kdyby však...

{NADPIS reklamního článku dlouhý přes dva řádky}

{POPISEK reklamního článku, také dlouhý přes dva a možná dokonce až tři řádky, končící na tři tečky...}

Huawei šokuje novým supersmartphonem s vysouvacím fotoaparátem

1. května 2024  7:02

Huawei představil novou řadu Pura, která nahrazuje dřívější řadu P. Mezi novinkami z nové řady je i...

Parádní velký tablet, kterému chybí snaha výrobce. Test Honoru Pad 9

5. května 2024

Čínský Honor se po svém stále ještě relativně nedávném návratu na globální trhy snaží dobýt...

Ukradené auto s AirTagem si našel, ale od policie dostal vynadáno

4. května 2024  7:02

Vyjít ráno před dům a nenajít tam svůj vůz je noční můrou každého majitele. Do takové...

Nový vědecký objev zdvojnásobí životnost baterií. Klíč je v nabíjení

4. května 2024

Premium Nový způsob nabíjení lithium-iontových baterií může podle studie německých vědců zdvojnásobit...

Soutěž o nejlepší fotku se sportovní tematikou má vítěze

3. května 2024

Soutěž o nejlepší fotku se sportovní tematikou je u konce a my vám s radostí představujeme trojici...

Dara Rolins je po další plastice. Kritiku fanoušků nechápe, cítí se svěží

Zpěvačka Dara Rolins (51) se na čas stáhla z veřejného života. V tom období prodělala „estetický zákrok“ a na sociální...

Natáčení Přátel bylo otřesné, vzpomíná herečka Olivia Williamsová

Britská herečka Olivia Williamsová (53) si ve čtvrté sérii sitcomu Přátelé zahrála epizodní roli jedné z družiček na...

Byli vedle ní samí ztroskotanci, vzpomíná Basiková na muže Bartošové

Byly každá z jiného těsta, ale hlavně se pohybovaly na opačných pólech hudebního spektra. Iveta Bartošová byla...

Ukaž kozy, řvali na ni. Potřebovala jsem se obouchat, vzpomíná komička Macháčková

Rozstřel Pravidelně vystupuje v pořadu Comedy Club se svými stand-upy, za knihu Svatební historky aneb jak jsem se nevdala se...

Je to šílený, hodnotily firmy práci řemeslníků, kteří opravili střechu

Po zimě se často ukážou mnohé „vady na kráse“ domu, střechy nevyjímaje. Někdy nezbývá nic jiného než kompletní výměna....