C ++ mbrtowc () - Perpustakaan Standard C ++

Fungsi mbrtowc () dalam C ++ menukar watak multibait sempit menjadi watak luas (jenis wchar_t).

Fungsi mbrtowc () ditentukan dalam fail header.

prototaip mbrtowc ()

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

Fungsi mbrtowc () menukar watak multibait yang diwakili oleh s menjadi watak luas dan disimpan di alamat yang ditunjukkan oleh pwc.

  • Sekiranya s bukan penunjuk nol, maksimum n bait bermula dari bait yang ditunjuk oleh s diperiksa untuk menentukan jumlah bait yang diperlukan untuk melengkapkan watak multibait seterusnya (termasuk urutan peralihan).
    Sekiranya watak n multibait seterusnya dalam s dan lengkap, fungsi menukarnya menjadi watak lebar yang sesuai dan disimpan di lokasi yang ditunjukkan oleh pwc.
  • Sekiranya s adalah penunjuk nol, parameter n dan pwc tidak ada kaitan dengan fungsi panggilan dan panggilan itu setara dengan std::mbrtowc(NULL, "", 1, ps).
  • Sekiranya watak lebar yang dihasilkan adalah watak kosong, keadaan penukaran yang disimpan dalam * ps adalah keadaan peralihan awal.

mbrtowc () Parameter

  • pwc: Penunjuk ke alamat memori di mana watak lebar yang ditukar disimpan.
  • s: Penunjuk kepada watak multibait untuk ditukarkan.
  • n: Bilangan maksimum bait dalam s untuk diperiksa.
  • ps: Penunjuk ke keadaan penukaran yang digunakan semasa menafsirkan rentetan multibait

mbrtowc () Nilai pulangan

Fungsi mbrtowc () mengembalikan yang pertama dari yang berikut:

  • 0 jika watak lebar yang ditukar dari s adalah nol (jika pwc tidak nol).
  • Bilangan watak multibait berjaya ditukarkan dari s.
  • -2 jika n bait seterusnya tidak mewakili watak multibait yang lengkap.
  • -1 adalah kesalahan pengekodan berlaku, errno ditetapkan ke EILSEQ .

Contoh: Bagaimana fungsi mbrtowc () berfungsi?

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

Semasa anda menjalankan program, outputnya adalah:

 1 bait seterusnya tidak mewakili watak multibait yang lengkap Seterusnya 5 bait tahan 2 bait watak multibait, Karakter lebar yang dihasilkan adalah µ Karakter lebar yang ditukar adalah watak lebar nol

Artikel menarik...