Funktio mbrtowc () C ++: ssa muuntaa kapean monitavuisen merkin laajaksi (tyyppiä wchar_t).
Mbrtowc () -funktio määritetään otsikkotiedostossa.
mbrtowc () -prototyyppi
size_t mbrtowc (wchar_t * pwc, const char * s, size_t n, mbstate_t * ps);
Mbrtowc () -toiminto muuntaa s: n edustaman monitavuisen merkin leveäksi merkiksi ja tallennetaan pwc: n osoittamaan osoitteeseen.
- Jos s ei ole nollaosoitin, tutkitaan enintään n tavua alkaen tavusta, johon s viittaa, jotta voidaan määrittää seuraavan monitavuisen merkin (mukaan lukien mahdolliset siirtosekvenssit) loppuun saattamiseen tarvittava tavujen määrä.
Jos seuraava n monitavuista merkkiä sekunnissa on täydellinen ja kelvollinen, funktio muuntaa sen vastaavaksi leveäksi merkiksi ja tallennetaan pwc: n osoittamaan sijaintiin. - Jos s on nollaosoitin, parametreilla n ja pwc ei ole mitään tekemistä funktiokutsun kanssa ja kutsu vastaa
std::mbrtowc(NULL, "", 1, ps)
. - Jos tuotettu laaja merkki on tyhjä merkki, * ps: ään tallennettu muuntotila on alkuperäinen siirtotila.
mbrtowc () -parametrit
- pwc: Osoitin muistiosoitteeseen, johon muunnettu laaja merkki tallennetaan.
- s: Muunnettava monitavuisen merkin osoitin.
- n: Tarkastettavien tavujen enimmäismäärä s: ssä.
- ps: Osoitin muuntotilaan, jota käytetään tulkittaessa monitavuista merkkijonoa
mbrtowc () Palautusarvo
Mbrtowc () -funktio palauttaa ensimmäisen seuraavista pätevistä:
- 0, jos s: stä muunnettu leveä merkki on nolla (jos pwc ei ole nolla).
- Monitavuisten merkkien määrä, joka on onnistuneesti muunnettu s: stä.
- -2, jos seuraavat n tavua eivät edusta täydellistä monitavuista merkkiä.
- -1 on koodausvirhe, virhe on asetettu EILSEQ: ksi .
Esimerkki: Kuinka mbrtowc () -toiminto toimii?
#include #include #include using namespace std; void test_mbrtowc(const char *s, size_t n) ( mbstate_t ps = mbstate_t(); wchar_t wc; int retVal = mbrtowc(&wc, s, n, &ps); if (retVal == -2) wcout << L"Next " << n << L" byte(s) doesn't represent a complete multibyte character" << endl; else if (retVal == -1) wcout << L"Next " << n << L" byte(s) doesn't represent a valid multibyte character" << endl; else if (retVal == 0) wcout << L"The converted wide character is a null wide character" << endl; else ( wcout << L"Next " << n << L" byte(s) hold " << retVal << L" bytes of multibyte character, "; wcout << L"Resulting wide character is " << wc << endl; ) ) int main() ( setlocale(LC_ALL, "en_US.utf8"); char str1() = "u00b5"; char str2() = " "; test_mbrtowc(str1, 1); test_mbrtowc(str1, 5); test_mbrtowc(str2, 5); return 0; )
Kun suoritat ohjelmaa, tulos on:
Seuraava 1 tavu ei edusta täydellistä monitavuista merkkiä Seuraava 5 tavua pitää 2 tavua monitavuista merkkiä, Tuloksena oleva leveä merkki on µ Muunnettu leveä merkki on tyhjä leveä merkki