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