Η συνάρτηση mbrtowc () στο C ++ μετατρέπει έναν στενό χαρακτήρα πολλαπλών byte σε έναν μεγάλο χαρακτήρα (τύπου wchar_t).
Η συνάρτηση mbrtowc () ορίζεται στο αρχείο κεφαλίδας.
πρωτότυπο mbrtowc ()
size_t mbrtowc (wchar_t * pwc, const char * s, size_t n, mbstate_t * ps);
Η συνάρτηση mbrtowc () μετατρέπει τον χαρακτήρα πολλαπλών τύπων που παριστάνεται από το s σε έναν ευρεία χαρακτήρα και αποθηκεύεται στη διεύθυνση που δείχνει το pwc
- Εάν το s δεν είναι μηδενικός δείκτης, εξετάζεται το μέγιστο των n byte που ξεκινούν από το byte που υποδεικνύεται από το s, προκειμένου να προσδιοριστεί ο αριθμός των byte που απαιτούνται για την ολοκλήρωση του επόμενου χαρακτήρα πολλαπλών byte (συμπεριλαμβανομένων τυχόν ακολουθιών μετατόπισης).
Εάν ο επόμενος χαρακτήρας n multibyte σε s είναι πλήρης και έγκυρος, η συνάρτηση τον μετατρέπει στον αντίστοιχο ευρεία χαρακτήρα και αποθηκεύεται στη θέση που δείχνει το pwc. - Εάν το s είναι μηδενικός δείκτης, οι παράμετροι n και pwc δεν έχουν καμία σχέση με τη λειτουργία κλήσης και η κλήση είναι ισοδύναμη με
std::mbrtowc(NULL, "", 1, ps)
. - Εάν ο μεγάλος χαρακτήρας που παράγεται είναι μηδενικός χαρακτήρας, η κατάσταση μετατροπής που είναι αποθηκευμένη σε * ps είναι η αρχική κατάσταση μετατόπισης.
mbrtowc () Παράμετροι
- pwc: Δείκτης στη διεύθυνση μνήμης όπου αποθηκεύεται ο μετατρεπόμενος χαρακτήρας.
- s: Δείκτης στον χαρακτήρα πολλαπλών byte για μετατροπή.
- n: Μέγιστος αριθμός byte σε s προς εξέταση.
- ps: Δείκτης στην κατάσταση μετατροπής που χρησιμοποιείται κατά την ερμηνεία της συμβολοσειράς πολλαπλών byte
mbrtowc () Επιστροφή τιμή
Η συνάρτηση mbrtowc () επιστρέφει το πρώτο από τα ακόλουθα που είναι έγκυρο:
- 0 εάν ο ευρύς χαρακτήρας που μετατρέπεται από το s είναι null (εάν το pwc δεν είναι null).
- Ο αριθμός των χαρακτήρων πολλαπλών τύπων μετατράπηκε επιτυχώς από s.
- -2 εάν τα επόμενα n bytes δεν αντιπροσωπεύουν έναν πλήρη χαρακτήρα πολλαπλών byte.
- -1 παρουσιάζεται σφάλμα κωδικοποίησης, το errno έχει ρυθμιστεί σε EILSEQ .
Παράδειγμα: Πώς λειτουργεί η λειτουργία mbrtowc ();
#include #include #include using namespace std; void test_mbrtowc(const char *s, size_t n) ( mbstate_t ps = mbstate_t(); wchar_t wc; int retVal = mbrtowc(&wc, s, n, &ps); if (retVal == -2) wcout << L"Next " << n << L" byte(s) doesn't represent a complete multibyte character" << endl; else if (retVal == -1) wcout << L"Next " << n << L" byte(s) doesn't represent a valid multibyte character" << endl; else if (retVal == 0) wcout << L"The converted wide character is a null wide character" << endl; else ( wcout << L"Next " << n << L" byte(s) hold " << retVal << L" bytes of multibyte character, "; wcout << L"Resulting wide character is " << wc << endl; ) ) int main() ( setlocale(LC_ALL, "en_US.utf8"); char str1() = "u00b5"; char str2() = " "; test_mbrtowc(str1, 1); test_mbrtowc(str1, 5); test_mbrtowc(str2, 5); return 0; )
Όταν εκτελείτε το πρόγραμμα, η έξοδος θα είναι:
Τα επόμενα 1 byte (ες) δεν αντιπροσωπεύουν έναν πλήρη χαρακτήρα πολλών byte