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

Η συνάρτηση strtoull () στο C ++ ερμηνεύει τα περιεχόμενα μιας συμβολοσειράς ως αναπόσπαστο αριθμό της καθορισμένης βάσης και επιστρέφει την τιμή της ως μη υπογεγραμμένο μακρύ int.

Η συνάρτηση strtoull () στο C ++ ερμηνεύει τα περιεχόμενα μιας συμβολοσειράς ως αναπόσπαστο αριθμό της καθορισμένης βάσης και επιστρέφει την τιμή της ως μη υπογεγραμμένο μακρύ int.

Αυτή η συνάρτηση ορίζει επίσης ένα δείκτη για να δείχνει στον πρώτο χαρακτήρα μετά τον τελευταίο έγκυρο χαρακτήρα της συμβολοσειράς, εάν υπάρχει, διαφορετικά ο δείκτης έχει οριστεί σε μηδέν.

 Για τη βάση 10 και τη συμβολοσειρά "41aac" Έγκυρο αριθμητικό μέρος -> 42 Πρώτος χαρακτήρας μετά από έγκυρο αριθμητικό μέρος -> α

πρωτότυπο strtoull () (Από το πρότυπο C ++ 11)

 μη υπογεγραμμένο μακρύ int strtoull (const char * str, char ** end, int base);

Η συνάρτηση strtoull () παίρνει συμβολοσειρά, δείκτη προς χαρακτήρα και ακέραια τιμή - βάση ως παράμετρος της, ερμηνεύει το περιεχόμενο της συμβολοσειράς ως αναπόσπαστο αριθμό της δεδομένης βάσης και επιστρέφει μια μη υπογεγραμμένη τιμή μεγάλου μήκους int.

Αυτή η συνάρτηση ορίζεται στο αρχείο κεφαλίδας.

strtoull () Παράμετροι

  • str: Μια συμβολοσειρά που έχει την αναπαράσταση ενός ακέραιου αριθμού.
  • end:Αναφορά σε ένα ήδη κατανεμημένο αντικείμενο τύπου char *. Η τιμή του τέλους ορίζεται από τη συνάρτηση στον επόμενο χαρακτήρα σε str μετά τον τελευταίο έγκυρο χαρακτήρα. Αυτή η παράμετρος μπορεί επίσης να είναι μηδενικός δείκτης, οπότε δεν χρησιμοποιείται.
  • base:Η βάση της ακέραιας τιμής. Το σύνολο των έγκυρων τιμών για τη βάση είναι (0, 2, 3,…, 35, 36).

strtoull () Τιμή επιστροφής

Η συνάρτηση strtoull () επιστρέφει:

  • μια μη υπογεγραμμένη μεγάλη τιμή int (η οποία μετατρέπεται από τη συμβολοσειρά)
  • 0 εάν δεν μπορούσε να γίνει έγκυρη μετατροπή.

Παράδειγμα 1: Πώς λειτουργεί η λειτουργία strtoull ();

 #include #include #include using namespace std; int main() ( int base = 10; char numberString() = "231ax12"; char *end; unsigned long long int number; number = strtoull(numberString, &end, base); cout << "String value = " << numberString << endl; cout << "Unsigned Long long int value = " << number << endl; cout << "End String = " << end << endl; strcpy(numberString, "231"); cout << "String value = " << numberString << endl; number = strtoull(numberString, &end, base); cout << "Unsigned Long long int value = " << number << endl; if (*end) ( cout << end; ) else ( cout << "Null pointer"; ) return 0; )

Όταν εκτελείτε το πρόγραμμα, η έξοδος θα είναι:

 Τιμή συμβολοσειράς = 231ax12 Μη υπογεγραμμένη τιμή μεγάλου μήκους int = 231 Τέλος συμβολοσειράς = ax12 Τιμή συμβολοσειράς = 231 Μη υπογεγραμμένη τιμή μεγάλου μήκους int = 231 Null δείκτης

Μια έγκυρη ακέραια τιμή για τη συνάρτηση strtoull () αποτελείται από:

  • Ένα προαιρετικό σύμβολο + ή -.
  • Ένα πρόθεμα 0 για οκταδική βάση (ισχύει μόνο όταν βάση = 8 ή 0).
  • Πρόθεμα 0x ή 0X για δεκαεξαδική βάση (ισχύει μόνο όταν η βάση = 16 ή 0).
  • Μια ακολουθία ψηφίων ή / και αλφαβήτων (εάν η βάση είναι μεγαλύτερη από 10)

Εάν το όρισμα περιέχει ένα σύμβολο μείον (-) στην αρχή, ο αρνητικός αριθμός μετατρέπεται σιωπηρά σε έναν μη υπογεγραμμένο τύπο μεγάλου μήκους που είναι θετικός αριθμός.

Οι έγκυρες τιμές για τη βάση παραμέτρων είναι (0, 2, 3,…, 35, 36). Ένα σύνολο έγκυρων ψηφίων για τη βάση 2 είναι (0, 1), για τη βάση 3 είναι (0, 1, 2) και ούτω καθεξής. Για βάσεις που ξεκινούν από 11 έως 36, τα έγκυρα ψηφία περιλαμβάνουν αλφάβητα. Το σύνολο των έγκυρων ψηφίων για τη βάση 11 είναι (0, 1,…, 9, A, a), για τη βάση 12 είναι (0, 1,…, 9, A, a, B, b) και ούτω καθεξής.

Παράδειγμα 2: λειτουργία strtoull () με διαφορετικές βάσεις

 #include #include using namespace std; int main() ( char *end; cout << "148ax" << " to Unsigned Long Long Int with base-5 = " << strtoll("148ax", &end, 5) << endl; cout << "End String = " << end << endl << endl; cout << "148ax" << " to Unsigned Long Long Int with base-15 = " << strtoll("148ax", &end, 15) << endl; cout << "End String = " << end << endl << endl; cout << "148ax" << " to Unsigned Long Long Int with base-35 = " << strtoll("148ax", &end, 35) << endl; cout << "End String = " << end << endl << endl; return 0; )

Όταν εκτελείτε το πρόγραμμα, η έξοδος θα είναι:

 148ax to Unigned Long Long Int με βάση-5 = 9 End String = 8ax 148ax to Unsigned Long Long Int with base-15 = 4405 End String = x 148ax to Unignign Long Long Int με βάση-35 = 1682308 End String =

Η συνάρτηση strtoull () αγνοεί όλους τους κορυφαίους χαρακτήρες του διαστήματος έως ότου βρεθεί ο κύριος χαρακτήρας εκτός κενού χώρου.

Γενικά, ένα έγκυρο ακέραιο όρισμα για τη συνάρτηση strtoull () έχει την ακόλουθη μορφή:

 (κενό διάστημα) (- | +) (0 | 0x) (αλφαριθμητικοί χαρακτήρες)

Στη συνέχεια, ξεκινώντας από αυτόν τον χαρακτήρα, παίρνει όσο το δυνατόν περισσότερους χαρακτήρες που σχηματίζουν μια έγκυρη ακέραια αναπαράσταση και τους μετατρέπει σε μια πολύ μεγάλη τιμή int. Ό, τι απομένει από τη συμβολοσειρά μετά τον τελευταίο έγκυρο χαρακτήρα αγνοείται και δεν επηρεάζει το αποτέλεσμα.

Παράδειγμα 3: συνάρτηση strtoull () για κορυφαίο κενό διάστημα, μείον και μη έγκυρη μετατροπή

 #include #include using namespace std; int main() ( char *end; cout << " 25axbz" << " to Unsigned Long Long Int with base-11 = " << strtoull(" 25axbz", &end, 11) << endl; cout << "End String = " << end << endl << endl; /* Negative value is converted to unsigned long long int type */ cout << " -110bcd" << " to Unsigned Long Long Int with base-2 = " << strtoull(" -110bcd", &end, 2) << endl; cout << "End String = " << end << endl << endl; cout << "ax110.97" << " to Unsigned Long Long Int with base-10 = " << strtoull("ax110.97", &end, 10) << endl; cout << "End String = " << end << endl << endl; return 0; )

Όταν εκτελείτε το πρόγραμμα, η έξοδος θα είναι:

 25axbz έως Long Sign Int χωρίς υπογραφή με βάση-11 = String End 307 = xbz -110bcd to Long Long Int χωρίς υπογραφή με βάση-2 = 18446744073709551610 End String = bcd ax110.97 έως Long Long Int Int χωρίς υπογραφή με βάση-10 = 0 End String = ax110.97

Εάν η βάση είναι 0, η αριθμητική βάση καθορίζεται αυτόματα εξετάζοντας τη μορφή της συμβολοσειράς. Εάν το πρόθεμα είναι 0, η βάση είναι οκτάλη (8). Εάν το πρόθεμα είναι 0x ή 0X, η βάση είναι δεκαεξαδική (16), διαφορετικά η βάση είναι δεκαδική (10).

Παράδειγμα 4: συνάρτηση strtoull () με βάση 0

 #include #include using namespace std; int main() ( char *end; /* octal base */ cout << "017x" << " to Unsigned Long Long Int with base-0 = " << strtoull("017x", &end, 0) << endl; cout << "End String = " << end << endl << endl; /* hexadecimal base */ cout << "0x1cg" << " to Unsigned Long Long Int with base-0 = " << strtoull("0x1cg", &end, 0) << endl; cout << "End String = " << end << endl << endl; /* decimal base */ cout << "70sxz" << " to Unsigned Long Long Int with base-0 = " << strtoull("70sxz", &end, 0) << endl; cout << "End String = " << end << endl << endl; return 0; )

Όταν εκτελείτε το πρόγραμμα, η έξοδος θα είναι:

 017x έως μη υπογεγραμμένο Long Long Int με βάση-0 = 15 End String = x 0x1cg to Unsigned Long Long Int με βάση-0 = 28 End String = g 70sxz to Unsigned Long Long Int με βάση-0 = 70 End String = sxz

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