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

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

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

mbrtoc32 () nguyên mẫu

 size_t mbrtoc32 (char32_t * pc32, const char * s, size_t n, mbstate_t * ps);

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

Nếu s đại diện cho một con trỏ null, các giá trị của n và pc32 bị bỏ qua và lệnh gọi tới tương đương với mbrtoc32(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.

mbrtoc32 () Tham số

  • pc32: Con trỏ đến vị trí bộ nhớ để lưu ký tự 32 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.

mbrtoc32 () Giá trị trả về

Hàm mbrtoc32 () trả về giá trị đầu tiên trong 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ự 32 bit.
  • -3 nếu ký tự tiếp theo char32_ttừ ký tự multi-char32_t (ví dụ: cặp thay thế) hiện đã được ghi thành * pc32. 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 * pc32.
  • -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 * pc32, errno được đặt thành EILSEQ và giá trị của * ps là không xác định.

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

 #include #include #include #include using namespace std; int main(void) ( char32_t pc32; char s() = "x" ; mbstate_t ps; int length; length = mbrtoc32(&pc32, s, MB_CUR_MAX, &ps); if (length < 0) ( perror("mbrtoc32() fails to convert"); exit(-1); ) cout << "Multibyte string = " << s << endl; cout << "Length = " << length << endl; printf ("32-bit character = 0x%08hx", pc32); 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 = 1 ký tự 32 bit = 0x00000078

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