C ++ mbrtowc () - C ++ - vakiokirjasto

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

Mielenkiintoisia artikkeleita...