Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình C

Hàm mbrtowc() trong C/C++


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 . mbrtowc = multi-byte to wide character. Chuyển ký tự multibyte hẹp sang ký tự rộng (wide character).

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ụ

#include 
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);
}

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

#include 
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);
}

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