Bài viết thảo luận hoạt động, cú pháp và ví dụ của std::mbrtoc32() trong C++ STL.
std::mbrtoc32() là gì?
Hàm nội tại C++ STL, định nghĩa trong
Nếu con trỏ ký tự không null và các tham số khác hợp lệ, chuyển đổi ký tự 32-bit tương ứng.
Cú pháp
size_t mbrtoc32(char32_t* pc32, char* str, size_t n, mbstate_t* ps);
Tham số
- pc32 – con trỏ lưu kết quả.
- str – chuỗi đầu vào.
- n – số byte kiểm tra.
- ps – con trỏ trạng thái khi dịch multibyte.
Giá trị trả về
- 0 – ký tự cần chuyển là NULL.
- 1...n – số byte multibyte đã chuyển từ *str.
- -3 – surrogate pair (char32_t từ multi-char32_t), không tạo byte từ đầu vào.
- -2 – n byte tiếp theo chưa hoàn chỉnh nhưng hiện tại hợp lệ.
- -1 – lỗi encoding, không ghi vào *pc32.
Ví dụ
#include#include #include #include #include using namespace std; int main(void) { char32_t hold; char str[] = "I"; mbstate_t arr{}; int len; len = mbrtoc32(&hold, str, MB_CUR_MAX, &arr); if (len < 0) { perror("conversion failed"); exit(-1); } cout << "String is: " << str << endl; cout << "Length is: " << len << endl; printf("32-bit character = 0g%02hd\n", hold); }
Kết quả
String is: I Length is: 1 32-bit character = 0g73
Ví dụ 2
#include#include #include #include #include using namespace std; int main(void){ char32_t hold; char str[] = "I"; mbstate_t arr{}; int len; len = mbrtoc32(&hold, str, MB_CUR_MAX, &arr); if (len < 0){ perror("conversion failed"); exit(-1); } cout << "String is: " << str << endl; cout << "Length is: " << len << endl; printf("32-bit character = 0x%08hx\n", hold); }
Kết quả
String is: I Length is: 1 32-bit character = 0x0x000000490