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