ในบทความนี้ เราจะพูดถึงการทำงาน ไวยากรณ์ และตัวอย่างของฟังก์ชัน std::mbrtoc16() ใน C++ STL
std::mbrtoc16() คืออะไร
ฟังก์ชัน std::mbrtoc16() เป็นฟังก์ชัน inbuilt ใน C++ STL ซึ่งกำหนดไว้ในไฟล์ส่วนหัว
หากตัวชี้อักขระที่เกี่ยวข้องไม่เป็นค่าว่าง และพารามิเตอร์อื่นๆ ทั้งหมดได้รับการยอมรับด้วย ตัวชี้จะแปลงอักขระ 16 บิตที่สอดคล้องกัน
ไวยากรณ์
size_t mbrtoc16( char16_t* pc16, char* str, size_t n, mbstate_t* ps);
พารามิเตอร์
ฟังก์ชันยอมรับพารามิเตอร์ต่อไปนี้ -
- pc16 − นี่คือตัวชี้ไปยังตำแหน่งที่เราต้องการให้จัดเก็บเอาต์พุต
- str − สตริงอักขระที่ใช้เป็นอินพุต
- น − เป็นจำนวนไบต์ที่ต้องตรวจสอบ
- ป.ล. − เป็นตัวชี้ไปยังอ็อบเจ็กต์สถานะเมื่อเราแปลสตริงแบบหลายไบต์
คืนค่า
ค่าที่ส่งกลับของฟังก์ชันนี้แตกต่างกันตามเงื่อนไขต่อไปนี้ -
- 0 − ฟังก์ชันจะคืนค่าศูนย์เมื่ออักขระใน str ที่ต้องแปลงเป็น NULL
- 1…น − จำนวนไบต์ของอักขระหลายไบต์ที่แปลงจากสตริงอักขระ *str.
- -3 − หากมีตัวแทนตัวแทนหมายถึง char16_t มาจาก multi-char16_t ไม่ต้องสร้างไบต์จากอินพุต
- -2 − เราจะได้รับ -2 เมื่อ n ไบต์ถัดไปไม่สมบูรณ์ แต่จนถึงตอนนี้เป็นอักขระหลายไบต์ที่ถูกต้อง
- -1 − เราได้รับ -1 เมื่อเราพบข้อผิดพลาดในการเข้ารหัส ไม่มีอะไรถูกเขียนไปยัง *pc16
ตัวอย่าง
#include <cstdio> #include <cstdlib> #include <iostream> #include <uchar.h> #include <wchar.h> using namespace std; int main(void){ char16_t hold; char str[] = "I"; mbstate_t arr{}; int len; // initializing the function len = mbrtoc16(&hold, str, MB_CUR_MAX, &arr); if (len < 0) { perror("conversion failed"); exit(-1); } cout << "String is: " << str << endl; cout << "Length is: " << len << endl; printf("16-bit character = 0g%02hd\n", hold); }
ผลลัพธ์
String is: I Length is: 1 16-bit character = 0g73