Sdílet prostřednictvím


mbrtoc16, mbrtoc32

Převede první vícebajtový znak UTF-8 v řetězci na ekvivalentní znak UTF-16 nebo UTF-32.

Syntaxe

size_t mbrtoc16(
   char16_t* destination,
   const char* source,
   size_t max_bytes,
   mbstate_t* state
);

size_t mbrtoc32(
   char32_t* destination,
   const char* source,
   size_t max_bytes,
   mbstate_t* state
);

Parametry

destination
Ukazatel na char16_t nebo char32_t ekvivalent vícebajtového znaku UTF-8, který chcete převést. Pokud je hodnota null, funkce neukládá hodnotu.

source
Ukazatel na řetězec vícebajtového znaku UTF-8, který chcete převést.

max_bytes
Maximální počet bajtů source k prozkoumání znaku, který má být převeden. Tento argument by měl být hodnota mezi 1 a počtem bajtů, včetně jakéhokoli ukončovacího prvku null, který zůstává v source.

state
Ukazatel na objekt stavu převodu mbstate_t použitý k interpretaci vícebajtového řetězce UTF-8 na jeden nebo více výstupních znaků.

Vrácená hodnota

Při úspěchu vrátí hodnotu první z těchto podmínek, která se použije vzhledem k aktuální state hodnotě:

Hodnota Podmínka
0 Další max_bytes nebo méně znaků převedených z source odpovídajících širokému znaku null, což je hodnota uložená, pokud destination není null.

state obsahuje počáteční stav směny.
Mezi 1 a max_bytesvčetně Vrácená hodnota je počet bajtů tohoto source dokončení platného vícebajtového znaku. Převedený široký znak je uložen, pokud destination není null.
-3 Další široký znak, který je výsledkem předchozího volání funkce, byl uložen, destination pokud destination není null. Toto volání funkce nevyužívají žádné bajty source .

Když source odkazuje na vícebajtový znak UTF-8, který vyžaduje, aby reprezentoval více než jeden široký znak (například náhradní pár), state pak se hodnota aktualizuje tak, aby další volání funkce zapíše nadbytečný znak.
-2 Další max_bytes bajty představují neúplný, ale potenciálně platný vícebajtový znak UTF-8. Žádná hodnota není uložena v destination. K tomuto výsledku může dojít, pokud max_bytes je nula.
-1 Došlo k chybě kódování. Další max_bytes nebo méně bajtů nepřispívá k úplnému a platnému vícebajtového znaku UTF-8. Žádná hodnota není uložena v destination.

EILSEQ je uložen v errno a hodnota state stavu převodu není zadána.

Poznámky

Funkce mbrtoc16 čte až max_bytes bajty od source prvního dokončení, platného vícebajtového znaku UTF-8 a pak uloží ekvivalentní znak UTF-16 do destination. Pokud znak vyžaduje více než jeden výstupní znak UTF-16, například náhradní dvojici, je nastavena hodnota state pro uložení dalšího znaku UTF-16 do destination dalšího volání mbrtoc16. Funkce mbrtoc32 je identická, ale výstup se uloží jako znak UTF-32.

Pokud source má hodnotu null, vrátí tyto funkce ekvivalent volání provedeného pomocí argumentů NULL pro destination, "" (prázdný řetězec ukončený hodnotou null) pro sourcea 1 pro max_bytes. Předané hodnoty destination a max_bytes jsou ignorovány.

Pokud source není null, funkce začíná na začátku řetězce a kontroluje až max_bytes bajty, aby určila počet bajtů potřebných k dokončení dalšího vícebajtového znaku UTF-8 včetně všech sekvencí posunu. Pokud vyšetřované bajty obsahují platný a úplný vícebajtový znak UTF-8, funkce převede tento znak na ekvivalentní 16bitový nebo 32bitový znak nebo znaky. Pokud destination není null, funkce uloží první (a možná jenom) znak výsledku do cíle. Pokud jsou vyžadovány další výstupní znaky, je hodnota nastavena tak state, aby následná volání funkce výstupem nadbytečných znaků a vrátila hodnotu -3. Pokud nejsou vyžadovány žádné výstupní znaky, state nastaví se na počáteční stav posunu.

Chcete-li převést vícebajtové znaky jiné než UTF-8 na znaky LE UTF-16, použijte mbrtowcfunkce , mbtowc nebo _mbtowc_l .

Ve výchozím nastavení je globální stav této funkce vymezen na aplikaci. Chcete-li toto chování změnit, přečtěte si téma Globální stav v CRT.

Požadavky

Function Záhlaví jazyka C Hlavička jazyka C++
mbrtoc16, mbrtoc32 <uchar.h> <cuchar>

Další informace o kompatibilitě najdete v tématu Kompatibilita.

Viz také

Převod dat
Národní prostředí
Interpretace vícebajtových sekvencí znaků
c16rtomb, c32rtomb
mbrtowc
mbsrtowcs
mbsrtowcs_s