C ++ mbrtowc () - Thư viện chuẩn C ++

Hàm mbrtowc () trong C ++ chuyển đổi một ký tự multibyte hẹp thành một ký tự rộng (kiểu wchar_t).

Hàm mbrtowc () được định nghĩa trong tệp tiêu đề.

nguyên mẫu mbrtowc ()

 size_t mbrtowc (wchar_t * pwc, const char * s, size_t n, mbstate_t * ps);

Hàm mbrtowc () chuyển đổi ký tự multibyte được đại diện bởi s thành một ký tự rộng và được lưu trữ trong địa chỉ mà pwc trỏ đến.

  • Nếu s không phải là một con trỏ rỗng, tối đa n byte bắt đầu từ byte được trỏ đến bởi s được kiểm tra để xác định số byte cần thiết để hoàn thành ký tự multibyte tiếp theo (bao gồm bất kỳ chuỗi dịch chuyển nào).
    Nếu n ký tự multibyte tiếp theo trong s là đầy đủ và hợp lệ, hàm sẽ chuyển nó thành ký tự rộng tương ứng và được lưu trữ ở vị trí được trỏ tới bởi pwc.
  • Nếu s là một con trỏ null, các tham số n và pwc không liên quan gì đến lệnh gọi hàm và lệnh gọi tương đương với std::mbrtowc(NULL, "", 1, ps).
  • Nếu ký tự rộng được tạo ra là ký tự rỗng, trạng thái chuyển đổi được lưu trữ trong * ps là trạng thái chuyển đổi ban đầu.

mbrtowc () Tham số

  • pwc: Con trỏ đến địa chỉ bộ nhớ nơi lưu ký tự rộng đã chuyển đổi.
  • s: Con trỏ tới ký tự nhiều byte để chuyển đổi.
  • n: Số byte tối đa tính bằng s.
  • ps: Con trỏ đến trạng thái chuyển đổi được sử dụng khi diễn giải chuỗi multibyte

mbrtowc () Giá trị trả về

Hàm mbrtowc () trả về giá trị đầu tiên sau đây là hợp lệ:

  • 0 nếu ký tự rộng được chuyển đổi từ s là null (nếu pwc không phải là null).
  • Số ký tự nhiềubyte được chuyển đổi thành công từ s.
  • -2 nếu n byte tiếp theo không đại diện cho một ký tự nhiều byte hoàn chỉnh.
  • -1 là lỗi mã hóa xảy ra, errno được đặt thành EILSEQ .

Ví dụ: Hàm mbrtowc () hoạt động như thế nào?

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

Khi bạn chạy chương trình, đầu ra sẽ là:

 (Các) byte tiếp theo không đại diện cho một ký tự multibyte hoàn chỉnh 5 byte tiếp theo chứa 2 byte ký tự multibyte, Ký tự rộng kết quả là µ Ký tự rộng được chuyển đổi là ký tự rộng rỗng

thú vị bài viết...