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