C ++ mbrtowc () - C ++ Pustaka Standar

Fungsi mbrtowc () di C ++ mengonversi karakter multibyte sempit menjadi karakter lebar (jenis wchar_t).

Fungsi mbrtowc () didefinisikan dalam file header.

mbrtowc () prototipe

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

Fungsi mbrtowc () mengubah karakter multibyte yang diwakili oleh s menjadi karakter lebar dan disimpan di alamat yang ditunjuk oleh pwc.

  • Jika s bukan penunjuk null, maksimal n byte mulai dari byte yang ditunjukkan oleh s diperiksa untuk menentukan jumlah byte yang diperlukan untuk menyelesaikan karakter multibyte berikutnya (termasuk urutan shift).
    Jika n karakter multibyte berikutnya dalam s lengkap dan valid, fungsi mengubahnya menjadi karakter lebar yang sesuai dan disimpan di lokasi yang ditunjuk oleh pwc.
  • Jika s adalah pointer nol, parameter n dan pwc tidak ada hubungannya dengan pemanggilan fungsi dan pemanggilannya sama dengan std::mbrtowc(NULL, "", 1, ps).
  • Jika karakter lebar yang dihasilkan adalah karakter null, status konversi yang disimpan di * ps adalah status shift awal.

mbrtowc () Parameter

  • pwc: Penunjuk ke alamat memori tempat penyimpanan karakter lebar yang dikonversi.
  • s: Penunjuk ke karakter multibyte yang akan diubah.
  • n: Jumlah byte maksimum dalam s untuk diperiksa.
  • ps: Pointer ke status konversi yang digunakan saat menafsirkan string multibyte

mbrtowc () Nilai kembali

Fungsi mbrtowc () mengembalikan yang pertama dari berikut ini yang valid:

  • 0 jika karakter lebar yang dikonversi dari s adalah null (jika pwc bukan null).
  • Jumlah karakter multibyte berhasil dikonversi dari s.
  • -2 jika n byte berikutnya tidak mewakili karakter multibyte lengkap.
  • -1 adalah kesalahan pengkodean terjadi, errno disetel ke EILSEQ .

Contoh: Bagaimana fungsi mbrtowc () bekerja?

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

Saat Anda menjalankan program, hasilnya adalah:

 1 byte berikutnya tidak mewakili karakter multibyte lengkap 5 byte berikutnya menampung 2 byte karakter multibyte, Menghasilkan karakter lebar adalah µ Karakter lebar yang dikonversi adalah karakter lebar null

Artikel yang menarik...