C ++ strtoull () - Perpustakaan Standard C ++

Fungsi strtoull () dalam C ++ menafsirkan isi rentetan sebagai nombor tidak terpisahkan dari pangkalan yang ditentukan dan mengembalikan nilainya sebagai int panjang yang tidak ditandatangani.

Fungsi strtoull () dalam C ++ menafsirkan isi rentetan sebagai nombor tidak terpisahkan dari pangkalan yang ditentukan dan mengembalikan nilainya sebagai int panjang yang tidak ditandatangani.

Fungsi ini juga menetapkan penunjuk untuk menunjuk ke watak pertama setelah aksara rentetan terakhir yang sah jika ada, jika tidak, penunjuk diatur ke nol.

 Untuk asas 10 dan rentetan "41aac" Bahagian angka yang sah -> 42 Karakter pertama selepas bahagian angka yang sah -> a

prototaip strtoull () (Seperti standard C ++ 11)

 int panjang panjang yang tidak ditandatangani (const char * str, char ** end, int base);

Fungsi strtoull () mengambil rentetan, penunjuk ke watak dan nilai integer - asas sebagai parameternya, menafsirkan kandungan rentetan sebagai bilangan integral dari pangkalan yang diberikan dan mengembalikan nilai int panjang yang tidak ditandatangani.

Fungsi ini ditentukan dalam fail header.

strtoull () Parameter

  • str: Rentetan yang mempunyai perwakilan nombor integral.
  • end:Rujukan ke objek jenis char * yang sudah diperuntukkan. Nilai akhir ditetapkan oleh fungsi ke watak seterusnya dalam str selepas watak terakhir yang sah. Parameter ini juga dapat menjadi penunjuk nol, dalam hal ini tidak digunakan.
  • base:Asas nilai kamiran. Kumpulan nilai yang sah untuk asas adalah (0, 2, 3,…, 35, 36).

strtoull () Nilai pulangan

Fungsi strtoull () mengembalikan:

  • nilai int panjang panjang yang tidak ditandatangani (yang ditukar dari rentetan).
  • 0 jika tiada penukaran yang sah dapat dilakukan.

Contoh 1: Bagaimana fungsi strtoull () berfungsi?

 #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; )

Semasa anda menjalankan program, outputnya adalah:

 Nilai rentetan = 231ax12 Nilai int panjang panjang tidak ditandatangani = 231 tali akhir = ax12 Nilai rentetan = 231 Nilai int panjang panjang tidak ditandatangani = 231 penunjuk kosong

Nilai integer yang sah untuk fungsi strtoull () terdiri daripada:

  • Tanda + atau - pilihan.
  • Awalan 0 untuk asas oktal (hanya berlaku apabila asas = 8 atau 0).
  • Awalan 0x atau 0X untuk asas heksadesimal (hanya berlaku apabila asas = 16 atau 0).
  • Urutan digit dan / atau huruf (jika asasnya lebih besar daripada 10).

Sekiranya argumen mengandungi tanda tolak (-) pada awalnya, nombor negatif secara implisit ditukar menjadi jenis int panjang yang tidak ditandatangani yang merupakan nombor positif.

Nilai yang sah untuk asas parameter adalah (0, 2, 3,…, 35, 36). Satu set digit yang sah untuk asas 2 adalah (0, 1), untuk asas 3 adalah (0, 1, 2) dan seterusnya. Untuk asas bermula dari 11 hingga 36, ​​digit yang sah termasuk huruf. Kumpulan digit yang sah untuk asas 11 adalah (0, 1,…, 9, A, a), untuk asas 12 ialah (0, 1,…, 9, A, a, B, b) dan sebagainya.

Contoh 2: fungsi strtoull () dengan asas yang berbeza

 #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; )

Semasa anda menjalankan program, outputnya adalah:

 148ax ke Long Long Int yang tidak ditandatangani dengan asas-5 = 9 String Akhir = 8ax 148ax ke Long Long Int yang tidak ditandatangani dengan base-15 = 4405 End String = x 148ax ke Long Long Int yang tidak ditandatangani dengan asas-35 = 1682308 End String =

Fungsi strtoull () mengabaikan semua watak ruang kosong sehingga watak utama bukan ruang kosong dijumpai.

Secara umum, argumen integer yang sah untuk fungsi strtoull () mempunyai bentuk berikut:

 (ruang kosong) (- | +) (0 | 0x) (aksara alfanumerik)

Kemudian, bermula dari watak ini, diperlukan sebanyak mungkin watak yang membentuk perwakilan bilangan bulat yang sah dan mengubahnya menjadi nilai int panjang yang panjang. Apa sahaja yang tersisa dari rentetan setelah watak yang terakhir terakhir diabaikan dan tidak memberi kesan pada hasilnya.

Contoh 3: fungsi strtoull () untuk ruang kosong utama, tolak dan penukaran tidak sah

 #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; )

Semasa anda menjalankan program, outputnya adalah:

 25axbz ke Long Long Int yang tidak ditandatangani dengan asas-11 = 307 End String = xbz -110bcd ke Long Long Int yang tidak ditandatangani dengan base-2 = 18446744073709551610 End String = bcd ax110.97 ke Long Long Int yang tidak ditandatangani dengan asas-10 = 0 End String = ax110.97

Sekiranya asasnya 0, asas angka ditentukan secara automatik dengan melihat format rentetan. Sekiranya awalan adalah 0, asasnya adalah oktal (8). Sekiranya awalan adalah 0x atau 0X, asasnya adalah heksadesimal (16), jika tidak, asasnya adalah perpuluhan (10).

Contoh 4: fungsi strtoull () dengan asas 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; )

Semasa anda menjalankan program, outputnya adalah:

 017x ke Long Long Int yang tidak ditandatangani dengan asas-0 = 15 End String = x 0x1cg ke Long Long Int yang tidak ditandatangani dengan base-0 = 28 End String = g 70sxz to Long Long Int yang tidak ditandatangani dengan asas-0 = 70 End String = sxz

Artikel menarik...