C ++ mbrtowc () - C ++ szabványos könyvtár

A C ++ mbrtowc () függvénye egy keskeny multibyte karaktert széles karakterré alakít (wchar_t típusúvá).

Az mbrtowc () függvény a fejlécfájlban van meghatározva.

mbrtowc () prototípus

 size_t mbrtowc (wchar_t * pwc, const char * s, size_t n, mbstate_t * ps);

Az mbrtowc () függvény az s által ábrázolt többbájtos karaktert széles karakterré konvertálja, és a pwc által jelzett címben tárolja.

  • Ha s nem nullmutató, akkor legfeljebb n bájtot vizsgálunk az s által mutatott bájtból kiindulva, hogy meghatározzuk a következő többbájtos karakter (beleértve az esetleges eltolási szekvenciákat is) befejezéséhez szükséges bájtok számát.
    Ha az s következő n többbájtos karakter teljes és érvényes, a függvény átalakítja a megfelelő széles karakterré, és a pwc által jelzett helyen tárolja.
  • Ha s nullmutató, akkor az n és a pwc paramétereknek semmi köze a függvényhíváshoz, és a hívás ekvivalens std::mbrtowc(NULL, "", 1, ps).
  • Ha az előállított széles karakter null karakter, akkor a * ps-ben tárolt konverziós állapot a kezdeti eltolási állapot.

mbrtowc () Paraméterek

  • pwc: Mutató arra a memória címre, ahol az átalakított széles karakter tárolódik.
  • s: Az átalakítandó multibyte karakter mutatója.
  • n: A vizsgálandó bájtok maximális száma másodpercben.
  • ps: A többbájtos karakterlánc értelmezésekor használt konverziós állapot mutatója

mbrtowc () Visszatérési érték

Az mbrtowc () függvény az alábbiak közül az elsőt adja vissza, amely érvényes:

  • 0, ha az s-ből konvertált széles karakter null (ha a pwc nem null).
  • Az s-ből sikeresen átalakított multibyte karakterek száma.
  • -2, ha a következő n bájt nem egy teljes többbájtos karaktert képvisel.
  • -1 kódolási hiba lép fel, az errno beállítása EILSEQ .

Példa: Hogyan működik az mbrtowc () függvény?

 #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; )

A program futtatásakor a kimenet a következő lesz:

 Következő 1 bájt nem képvisel teljes multibyte karaktert Következő 5 bájt 2 bájt multibyte karaktert tartalmaz, az eredmény széles karakter µ Az átalakított széles karakter null széles karakter

érdekes cikkek...