mbtowc() (Multibyte to Wide Character) ফাংশনটি একটি মাল্টিবাইট ক্যারেক্টার সিকোয়েন্সকে একটি واইড ক্যারেক্টার (wchar_t) এ কনভার্ট করে। এটি <stdlib.h> (C) বা <cstdlib> (C++) হেডারে থাকে।
ফাংশন সিগনেচার
int mbtowc(wchar_t *pwc, const char *str, size_t n);
প্যারামিটার
- pwc: রেজাল্ট স্টোর করার واইড ক্যারেক্টার পয়েন্টার
- str: মাল্টিবাইট সিকোয়েন্সের প্রথম বাইটের পয়েন্টার
- n: চেক করার সর্বোচ্চ বাইট সংখ্যা
রিটার্ন ভ্যালু
> 0: কনভার্ট হওয়া বাইট সংখ্যা0: যদিstrনাল ক্যারেক্টার 가리킨 করা হয়-1: ইনভ্যালিড মাল্টিবাইট সিকোয়েন্স (এনকোডিং এরর)- যদি
str == NULL:_shift state_ রিসেট করে, রিটার্ন নন-জিরো (স্টেট-ফুল এনকোডিং হলে) বা ০ (স্টেট-লেস হলে)
উদাহরণ
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <wchar.h>
#include <locale.h>
int main() {
// লোকেল সেট করুন (UTF-8 সাপোর্টের জন্য)
setlocale(LC_ALL, "");
char *str = "This is tutorialspoint.com";
wchar_t wc;
int len = mbtowc(&wc, str, MB_CUR_MAX); // প্রথম ক্যারেক্টার কনভার্ট
if (len > 0) {
printf("First char: '%lc' (bytes consumed: %d)\n", wc, len);
} else if (len == 0) {
printf("Null character\n");
} else {
printf("Invalid multibyte sequence\n");
}
// পুরো স্ট্রিং কনভার্ট (লুপ)
wchar_t wbuf[100];
const char *p = str;
int i = 0;
while (*p && i < 99) {
int consumed = mbtowc(&wbuf[i], p, MB_CUR_MAX);
if (consumed <= 0) break;
p += consumed;
i++;
}
wbuf[i] = L'\0';
wprintf(L"Wide string: %ls\n", wbuf);
return 0;
}
আউটপুট (নমুনা)
First char: 'T' (bytes consumed: 1)
Wide string: This is tutorialspoint.com
গুরুত্বপূর্ণ নোট
MB_CUR_MAX— করেন্ট লোকেলে সর্বোচ্চ মাল্টিবাইট ক্যারেক্টার লেংথ (UTF-8-এ ৪)setlocale(LC_ALL, "")কল না করলে "C" লোকেল ব্যবহার হয় (সাধারণত ASCII-ওনلی)mbtowcস্টেট-ফুল (stateful) — সিকোয়েন্সিয়াল কল করলে শিফ্ট স্টেট মেইনটেইন করে- আধুনিক কোডে
mbrtowc(রিস্টার্টেবল, থ্রেড-সেফ) বা C++-এstd::wstring_convert/std::codecvt(C++11, deprecated in C++17) /iconvব্যবহার করা ভালো
সম্পর্কিত ফাংশন
mblen()— মাল্টিবাইট ক্যারেক্টার লেংথ বের করেwctomb()— واইড ক্যারেক্টারকে মাল্টিবাইটে কনভার্ট করেmbstowcs(),wcstombs()— স্ট্রিং লেভেল কনভার্সন