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