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

Hàm mbrtoc16 () trong C ++ chuyển đổi một ký tự multibyte hẹp thành một biểu diễn ký tự 16 bit.

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

mbrtoc16 () nguyên mẫu

 size_t mbrtoc16 (char16_t * pc16, const char * s, size_t n, mbstate_t * ps);

Hàm mbrtoc16 () chuyển đổi tối đa n ký tự multibyte được đại diện bởi s thành ký tự utf-16 tương đương của nó và lưu trữ nó trong vị trí bộ nhớ được chỉ đến bởi pc16.

Nếu s đại diện cho một con trỏ null, các giá trị của n và pc16 bị bỏ qua và lệnh gọi tới tương đương với mbrtoc16 (NULL, "", 1, ps).

Nếu ký tự kết quả được tạo ra là null, trạng thái chuyển đổi * ps đại diện cho trạng thái dịch chuyển ban đầu.

mbrtoc16 () Tham số

  • pc16: Con trỏ đến vị trí bộ nhớ để lưu ký tự 16 bit kết quả.
  • s: Con trỏ tới ký tự nhiều byte để chuyển đổi.
  • n: Số byte tối đa tính bằng s để chuyển đổi.
  • ps: Một con trỏ đến một đối tượng mbstate_t được sử dụng khi diễn giải chuỗi multibyte.

mbrtoc16 () Giá trị trả về

Hàm mbrtoc16 () trả về giá trị đầu tiên trong số các giá trị sau phù hợp với các trường hợp bên dưới:

  • 0 nếu ký tự được chuyển đổi là ký tự rỗng.
  • số byte (nhiều nhất là n) của ký tự multibyte đã được chuyển đổi thành công thành ký tự 16 bit.
  • -3 nếu ký tự tiếp theo char16_ttừ ký tự multi-char16_t (ví dụ: cặp thay thế) hiện đã được ghi thành * pc16. Không có byte nào được xử lý từ đầu vào trong trường hợp này.
  • -2 nếu n byte tiếp theo tạo thành một ký tự multibyte không đầy đủ, nhưng hợp lệ cho đến nay. Trong trường hợp này, không có gì được ghi vào * pc16.
  • -1 nếu lỗi mã hóa xảy ra. Trong trường hợp này, không có gì được ghi vào * pc16, errno được đặt thành EILSEQ và giá trị của * ps là không xác định.

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

 #include #include #include #include using namespace std; int main(void) ( char16_t pc16; char s() = "x" ; mbstate_t ps(); int length; length = mbrtoc16(&pc16, s, MB_CUR_MAX, &ps); if (length < 0) ( perror("mbrtoc16() fails to convert"); exit(-1); ) cout << "Multibyte string = " << s << endl; cout << "Length = " << length << endl; printf ("16-bit character = 0x%04hx", pc16); return 0; )

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

 Chuỗi nhiều byte = x Chiều dài> h = 1 ký tự 16 bit = 0x0078

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