কম্পিউটার টিউটোরিয়াল

সি ভাষায় mbtowc() ফাংশন: মাল্টিবাইট সিকোয়েন্স থেকে واইড ক্যারেক্টার কনভার্সন

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() — স্ট্রিং লেভেল কনভার্সন
  1. C-তে graphics.h-র fillpoly() ফাংশন ব্যবহার

  2. C গ্রাফিক্স-এ bar() ফাংশন

  3. PHP-এ ctype_alnum() ফাংশন

  4. SQL Server-এ STR ফাংশন