C ++ में mbrtowc () फ़ंक्शन एक संकीर्ण मल्टीबाइट चरित्र को एक विस्तृत वर्ण (प्रकार का wchar_b) में परिवर्तित करता है।
Mbrtowc () फ़ंक्शन को हेडर फ़ाइल में परिभाषित किया गया है।
mbrtowc () प्रोटोटाइप
size_t mbrtowc (wchar_t * pwc, const char * s, size_t n, mbstate_t * ps);
Mbrtowc () फ़ंक्शन मल्टीबाइट कैरेक्टर को s द्वारा विस्तृत वर्ण में परिवर्तित करता है और इसे pwc द्वारा इंगित पते में संग्रहीत किया जाता है।
- यदि एक शून्य पॉइंटर नहीं है, तो अगले मल्टीबाइट कैरेक्टर (किसी भी शिफ्ट सीक्वेंस सहित) को पूरा करने के लिए आवश्यक बाइट्स की संख्या निर्धारित करने के लिए बाइट से इंगित की गई बाइट से शुरू होने वाले अधिकतम n बाइट्स की जांच की जाती है।
यदि s में अगला n मल्टीबाइट चरित्र पूर्ण और मान्य है, तो फ़ंक्शन इसे संबंधित विस्तृत वर्ण में कनवर्ट करता है और इसे pwc द्वारा इंगित स्थान में संग्रहीत किया जाता है। - यदि एक अशक्त सूचक है, तो पैरामीटर n और pwc का फ़ंक्शन कॉल से कोई लेना-देना नहीं है और कॉल समतुल्य है
std::mbrtowc(NULL, "", 1, ps)
। - यदि निर्मित विस्तृत वर्ण एक अशक्त वर्ण है, तो * ps में संग्रहीत रूपांतरण स्थिति प्रारंभिक पाली अवस्था है।
mbrtowc () पैरामीटर
- pwc: मेमोरी एड्रेस को पॉइंटर करें जहां परिवर्तित वाइड कैरेक्टर को स्टोर किया जाता है।
- s: कन्वर्ट करने के लिए मल्टीबाइट चरित्र को इंगित करता है।
- n: जांच करने के लिए बाइट्स की अधिकतम संख्या।
- पीएस: मल्टीबीट स्ट्रिंग की व्याख्या करते समय उपयोग किए जाने वाले रूपांतरण राज्य को इंगित करता है
mbrtowc () वापसी मान
Mbrtowc () फ़ंक्शन निम्न में से पहला है जो मान्य है:
- 0 यदि s से परिवर्तित विस्तृत वर्ण null है (यदि pwc null नहीं है)।
- मल्टीबाइट चरित्र की संख्या सफलतापूर्वक s से परिवर्तित हो गई।
- -2 अगर अगले n बाइट्स एक पूर्ण मल्टीबाइट चरित्र का प्रतिनिधित्व नहीं करता है।
- -1 में एन्कोडिंग त्रुटि होती है, इरनो को EILSEQ पर सेट किया जाता है ।
उदाहरण: mbrtowc () फ़ंक्शन कैसे काम करता है?
#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; )
जब आप प्रोग्राम चलाते हैं, तो आउटपुट होगा:
अगला 1 बाइट (s) एक पूर्ण मल्टीबाइट चरित्र का प्रतिनिधित्व नहीं करता है अगला 5 बाइट (s) मल्टीबाइट चरित्र के 2 बाइट्स रखता है, विस्तृत वर्ण का परिणाम है wide परिवर्तित विस्तृत वर्ण एक अशक्त विस्तृत वर्ण है