Bài viết thảo luận hoạt động, cú pháp và ví dụ của std::mbrtowc() trong C++ STL.
std::mbrtowc() là gì?
Hàm nội tại C++ STL, định nghĩa trong
Cú pháp
size_t mbrtowc(wchar_t* pwc, char* str, size_t n, mbstate_t* ps);
Tham số
- pwc – con trỏ vị trí lưu kết quả.
- str – chuỗi ký tự đầu vào.
- n – số byte kiểm tra.
- ps – con trỏ đối tượng trạng thái khi dịch chuỗi multibyte.
Giá trị trả về
- 0 – ký tự cần chuyển là NULL.
- 1...n – số byte multibyte đã chuyển từ *str.
- -2 – n byte tiếp theo chưa hoàn chỉnh nhưng hiện tại là multibyte hợp lệ.
- -1 – lỗi encoding, không ghi vào *pwc.
Ví dụ
#includeusing namespace std; void print_(const char* ch){ mbstate_t temp = mbstate_t(); int cal = strlen(ch); const char* i = ch + cal; int total; wchar_t con; while ((total = mbrtowc(&con, ch, i - ch, &temp)) > 0){ wcout << "Next " << total << " bytes are the character " << con << '\n'; ch += total; } } int main(){ setlocale(LC_ALL, "en_US.utf8"); const char* len = u8"z\u00df\u6c34"; print_(len); }
Kết quả
Next 1 bytes are the character z Next 2 bytes are the character ß Next 3 bytes are the character 水
Ví dụ 2
#includeusing namespace std; void print_(const char* ch){ mbstate_t temp = mbstate_t(); int cal = strlen(ch); const char* i = ch + cal; int total; wchar_t con; while ((total = mbrtowc(&con, ch, i - ch, &temp)) > 0){ wcout << "Next " << total << " bytes are the character " << con << '\n'; ch += total; } } int main(){ setlocale(LC_ALL, "en_US.utf8"); const char* len = u8"\xE2\x88\x83y\xE2\x88\x80x\xC2"; print_(len); }
Kết quả
Next 3 bytes are the character ∃ Next 1 bytes are the character y Next 3 bytes are the character ∀ Next 1 bytes are the character x