C ++ mbrtowc () - C ++ Τυπική βιβλιοθήκη

Η συνάρτηση 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

ενδιαφέροντα άρθρα...