Trong bài viết này, chúng ta sẽ thảo luận về cách làm việc, cú pháp và các ví dụ của hàm std ::mbrtowc () trong C ++ STL.
std ::mbrtowc () là gì?
Hàm std ::mbrtowc () là một hàm có sẵn trong C ++ STL, được định nghĩa trong tệp tiêu đề
Cú pháp
size_t mbrtowc( wchar_t* pwc, char* str, size_t n, mbstate_t* ps);
Tham số
Hàm chấp nhận (các) tham số sau -
- pwc - Đây là con trỏ đến vị trí mà chúng tôi muốn lưu trữ kết quả đầu ra.
- str - Chuỗi ký tự được sử dụng làm đầu vào.
- n - Đó là số byte cần được kiểm tra.
- ps - Nó là con trỏ đến đối tượng trạng thái khi chúng ta đang diễn giải chuỗi multibyte.
Giá trị trả về
Giá trị trả về của hàm này khác nhau tùy theo điều kiện sau -
- 0 - Hàm sẽ trả về 0 khi ký tự trong str phải được chuyển đổi là NULL.
- 1… n - Số byte của ký tự multibyte được chuyển đổi từ chuỗi ký tự * str.
- -2 - Chúng tôi sẽ nhận được -2 khi n byte tiếp theo chưa hoàn thành nhưng cho đến nay là một ký tự nhiều byte hợp lệ.
- -1 - Chúng tôi nhận được -1 khi gặp lỗi mã hóa, không có gì được ghi vào * pwc.
Ví dụ
#include <bits/stdc++.h> using 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); }
Đầu ra
Next 1 bytes are the character z Next 2 bytes are the character ß Next 3 bytes are the character 水
Ví dụ
#include <bits/stdc++.h> using 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); }
Đầu ra
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