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

Hàm mbsrtowcs () trong C ++ chuyển đổi chuỗi ký tự nhiều byte hẹp thành chuỗi ký tự rộng (kiểu wchar_t).

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

nguyên mẫu mbsrtowcs ()

 size_t mbsrtowcs (wchar_t * dest, const char ** src, size_t len, mbstate_t * ps);

Hàm mbsrtowcs () chuyển đổi chuỗi ký tự đa byte có byte đầu tiên được biểu diễn bằng * src thành biểu diễn ký tự rộng tương ứng và được lưu trữ trong mảng ký tự rộng được trỏ tới bởi hàm. Tối đa các ký tự rộng len được ghi vào hàm.

Quá trình chuyển đổi tương tự như gọi mbrtowc () lặp đi lặp lại. Việc chuyển đổi sẽ dừng nếu:

  • Một ký tự rỗng nhiều byte đã được chuyển đổi và lưu trữ. Trong trường hợp này, src được đặt thành null và ps đại diện cho trạng thái dịch chuyển ban đầu.
  • Đã gặp phải một ký tự multibyte không hợp lệ. Trong trường hợp này, src được đặt để trỏ đến đầu của ký tự multibyte chưa được chuyển đổi đầu tiên.
  • ký tự rộng len đã được lưu trữ trong đích. Trong trường hợp này, src được đặt để trỏ đến đầu của ký tự multibyte chưa được chuyển đổi đầu tiên.

mbsrtowcs () Tham số

  • dest: Con trỏ đến mảng nơi lưu trữ ký tự rộng đã chuyển đổi.
  • src: Con trỏ để trỏ tới ký tự nhiều byte đầu tiên cần chuyển đổi.
  • len: Số ký tự rộng tối đa để lưu trữ.
  • ps: Con trỏ đến trạng thái chuyển đổi được sử dụng khi diễn giải chuỗi multibyte

mbsrtowcs () Giá trị trả về

  • Khi thành công, hàm mbsrtowcs () trả về số lượng các ký tự rộng được viết cho hàm cuối, ngoại trừ ký tự rộng rỗng kết thúc. Nếu đích là con trỏ null, nó trả về số lượng ký tự rộng lẽ ra đã được viết với độ dài không giới hạn.
  • Đối với lỗi chuyển đổi, -1 được trả về và errno được đặt thành EILSEQ .

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

 #include #include #include using namespace std; int main() ( setlocale(LC_ALL, "en_US.utf8"); const char* str = "u0763u0757u077fu075f"; wchar_t wstr(20); mbstate_t ps = mbstate_t(); int len = 10; int retVal; retVal = mbsrtowcs(wstr, &str, len, &ps); wcout << L"Number of wide characters written (excluding L "\0 ") = " << retVal << endl; wcout << L"Wide character = " << wstr << endl; return 0; )

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

 Số ký tự rộng được viết (không bao gồm L " 0") = 4 Ký tự rộng = ݣݗݿݟ

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