Η συνάρτηση mbrtoc16 () στο C ++ μετατρέπει έναν στενό χαρακτήρα πολλαπλών byte σε αναπαράσταση χαρακτήρων 16 bit.
Η συνάρτηση mbrtoc16 () ορίζεται στο αρχείο κεφαλίδας.
πρωτότυπο mbrtoc16 ()
size_t mbrtoc16 (char16_t * pc16, const char * s, size_t n, mbstate_t * ps);
Η συνάρτηση mbrtoc16 () μετατρέπει το πολύ n multibyte χαρακτήρα που αντιπροσωπεύεται από το s στον αντίστοιχο utf-16 χαρακτήρα και τον αποθηκεύει στη θέση μνήμης που επισημαίνεται από το pc16.
Εάν το s αντιπροσωπεύει έναν μηδενικό δείκτη, οι τιμές των n και pc16 αγνοούνται και η κλήση προς είναι ισοδύναμη με το mbrtoc16 (NULL, "", 1, ps).
Εάν ο προκύπτων χαρακτήρας που παράγεται είναι μηδενικός, η κατάσταση μετατροπής * ps αντιπροσωπεύει την αρχική κατάσταση μετατόπισης.
mbrtoc16 () Παράμετροι
- pc16: Δείκτης στη θέση μνήμης για αποθήκευση του προκύπτοντος χαρακτήρα 16 bit.
- s: Δείκτης στον χαρακτήρα πολλαπλών byte για μετατροπή.
- n: Μέγιστος αριθμός byte σε s για μετατροπή.
- ps: Ένας δείκτης σε ένα αντικείμενο mbstate_t που χρησιμοποιείται κατά την ερμηνεία της συμβολοσειράς πολλαπλών byte.
mbrtoc16 () Τιμή επιστροφής
Η συνάρτηση mbrtoc16 () επιστρέφει την πρώτη από την ακόλουθη τιμή που ταιριάζει με τις παρακάτω περιπτώσεις:
- 0 εάν ο χαρακτήρας που έχει μετατραπεί είναι μηδενικός χαρακτήρας.
- τον αριθμό των byte (το πολύ n) του χαρακτήρα πολλαπλών byte που μετατράπηκε επιτυχώς σε χαρακτήρα 16 bit.
- -3 εάν ο επόμενος
char16_t
χαρακτήρας multi-char16_t (π.χ. ένα υποκατάστατο ζεύγος) έχει πλέον γραφτεί σε * pc16. Δεν γίνεται επεξεργασία byte από την είσοδο σε αυτήν την περίπτωση. - -2 εάν τα επόμενα n bytes αποτελούν έναν ελλιπή, αλλά μέχρι στιγμής έγκυρο, χαρακτήρα πολλαπλών byte. Σε αυτήν την περίπτωση δεν γράφεται τίποτα στο * pc16.
- -1 εάν παρουσιαστεί σφάλμα κωδικοποίησης. Σε αυτήν την περίπτωση τίποτα δεν γράφεται στο * pc16, το errno έχει οριστεί σε EILSEQ και η τιμή του * ps δεν έχει καθοριστεί.
Παράδειγμα: Πώς λειτουργεί η λειτουργία mbrtoc16 ();
#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; )
Όταν εκτελείτε το πρόγραμμα, η έξοδος θα είναι:
Συμβολοσειρά πολλαπλών byte = x Μήκος> h = 1 χαρακτήρας 16-bit = 0x0078