C ++ mbrtowc () - C ++ Standart Kitaplığı

C ++ 'daki mbrtowc () işlevi, dar çok baytlı bir karakteri geniş bir karaktere (wchar_t türünde) dönüştürür.

Mbrtowc () işlevi başlık dosyasında tanımlanmıştır.

mbrtowc () prototip

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

Mbrtowc () işlevi, s ile temsil edilen çok baytlı karakteri geniş bir karaktere dönüştürür ve pwc ile gösterilen adreste saklanır.

  • S bir boş gösterici değilse, bir sonraki çok baytlı karakteri tamamlamak için gerekli bayt sayısını belirlemek için (herhangi bir kaydırma dizisi dahil), s ile gösterilen bayttan başlayan maksimum n bayt incelenir.
    S'deki sonraki n çok baytlı karakter tam ve geçerliyse, işlev onu karşılık gelen geniş karaktere dönüştürür ve pwc ile gösterilen konumda saklanır.
  • S bir boş gösterici ise, n ve pwc parametrelerinin işlev çağrısıyla ilgisi yoktur ve çağrı ile eşdeğerdir std::mbrtowc(NULL, "", 1, ps).
  • Üretilen geniş karakter bir boş karakter ise, * ps'de saklanan dönüştürme durumu ilk kaydırma durumudur.

mbrtowc () Parametreler

  • pwc: Dönüştürülen geniş karakterin saklandığı bellek adresine işaretçi.
  • s: Dönüştürülecek çok baytlı karakterin işaretçisi.
  • n: s cinsinden incelenecek maksimum bayt sayısı.
  • ps: Çok baytlı dizeyi yorumlarken kullanılan dönüştürme durumuna işaretçi

mbrtowc () Dönüş değeri

Mbrtowc () işlevi, aşağıdakilerden geçerli olan ilkini döndürür:

  • S'den dönüştürülen geniş karakter null ise 0 (pwc boş değilse).
  • S'den başarıyla dönüştürülen çok baytlı karakter sayısı.
  • Sonraki n bayt tam bir çok baytlı karakteri temsil etmiyorsa -2.
  • -1 kodlama hatası oluşur, errno EILSEQ olarak ayarlanır .

Örnek: mbrtowc () işlevi nasıl çalışır?

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

Programı çalıştırdığınızda, çıktı:

 Sonraki 1 bayt, tam bir çok baytlı karakteri temsil etmiyor Sonraki 5 bayt, 2 bayt çok baytlı karakter tutuyor, Ortaya çıkan geniş karakter µ'dur Dönüştürülen geniş karakter bir boş geniş karakterdir

Ilginç makaleler...