C ++ strtoull () - Thư viện chuẩn C ++

Hàm strtoull () trong C ++ diễn giải nội dung của một chuỗi dưới dạng số tích phân của cơ sở được chỉ định và trả về giá trị của nó dưới dạng một int dài không dấu.

Hàm strtoull () trong C ++ diễn giải nội dung của một chuỗi dưới dạng số tích phân của cơ sở được chỉ định và trả về giá trị của nó dưới dạng một int dài không dấu.

Hàm này cũng đặt một con trỏ trỏ đến ký tự đầu tiên sau ký tự hợp lệ cuối cùng của chuỗi nếu có, nếu không thì con trỏ được đặt thành null.

 Đối với cơ số 10 và chuỗi "41aac" Phần số hợp lệ -> 42 Ký tự đầu tiên sau phần số hợp lệ -> a

nguyên mẫu strtoull () (Theo tiêu chuẩn C ++ 11)

 unsigned long long int strtoull (const char * str, char ** end, int base);

Hàm strtoull () nhận chuỗi, một con trỏ tới ký tự và một giá trị nguyên - cơ sở làm tham số của nó, diễn giải nội dung của chuỗi dưới dạng số tích phân của cơ sở đã cho và trả về giá trị int dài dài không dấu.

Hàm này được định nghĩa trong tệp tiêu đề.

tham số strtoull ()

  • str: Một chuỗi có biểu diễn của một số tích phân.
  • end:Tham chiếu đến một đối tượng đã được cấp phát kiểu char *. Giá trị của end được hàm đặt thành ký tự tiếp theo trong str sau ký tự hợp lệ cuối cùng. Tham số này cũng có thể là một con trỏ null, trong trường hợp đó nó không được sử dụng.
  • base:Cơ sở của giá trị tích phân. Tập hợp các giá trị hợp lệ cho cơ sở là (0, 2, 3,…, 35, 36).

strtoull () Giá trị trả về

Hàm strtoull () trả về:

  • một giá trị int dài dài không dấu (được chuyển đổi từ chuỗi).
  • 0 nếu không thể thực hiện chuyển đổi hợp lệ.

Ví dụ 1: Hàm strtoull () hoạt động như thế nào?

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

Khi bạn chạy chương trình, đầu ra sẽ là:

 Giá trị chuỗi = 231ax12 Giá trị int dài chưa ký = 231 Chuỗi kết thúc = ax12 Giá trị chuỗi = 231 Giá trị int dài chưa ký = 231 Con trỏ rỗng

Giá trị số nguyên hợp lệ cho hàm strtoull () bao gồm:

  • Dấu + hoặc - tùy chọn.
  • Tiền tố 0 cho cơ số bát phân (chỉ áp dụng khi cơ số = 8 hoặc 0).
  • Tiền tố 0x hoặc 0X cho cơ số thập lục phân (chỉ áp dụng khi cơ số = 16 hoặc 0).
  • Một dãy chữ số và / hoặc bảng chữ cái (nếu cơ số lớn hơn 10).

Nếu đối số có chứa dấu trừ (-) ở đầu, thì số âm được chuyển đổi hoàn toàn thành kiểu int dài dài không dấu là một số dương.

Các giá trị hợp lệ cho cơ sở tham số là (0, 2, 3,…, 35, 36). Tập hợp các chữ số hợp lệ cho cơ số 2 là (0, 1), cho cơ số 3 là (0, 1, 2), v.v. Đối với các cơ sở bắt đầu từ 11 đến 36, các chữ số hợp lệ bao gồm các bảng chữ cái. Tập hợp các chữ số hợp lệ cho cơ số 11 là (0, 1,…, 9, A, a), cho cơ số 12 là (0, 1,…, 9, A, a, B, b), v.v.

Ví dụ 2: Hàm strtoull () với các cơ số khác nhau

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

Khi bạn chạy chương trình, đầu ra sẽ là:

 148ax đối với Int dài chưa ký với cơ số-5 = 9 Chuỗi cuối = 8ax 148ax đến Int dài dài không dấu với cơ sở-15 = 4405 Kết thúc chuỗi = x 148ax đến Int dài dài không dấu với cơ sở-35 = 1682308 Kết thúc chuỗi =

Hàm strtoull () bỏ qua tất cả các ký tự khoảng trắng hàng đầu cho đến khi tìm thấy ký tự không phải khoảng trắng chính.

Nói chung, đối số số nguyên hợp lệ cho hàm strtoull () có dạng sau:

 (khoảng trắng) (- | +) (0 | 0x) (ký tự chữ và số)

Sau đó, bắt đầu từ ký tự này, cần nhiều ký tự nhất có thể để tạo thành biểu diễn số nguyên hợp lệ và chuyển đổi chúng thành giá trị int dài. Bất cứ thứ gì còn lại của chuỗi sau ký tự hợp lệ cuối cùng sẽ bị bỏ qua và không ảnh hưởng đến kết quả.

Ví dụ 3: Hàm strtoull () cho khoảng trắng ở đầu, dấu trừ và chuyển đổi không hợp lệ

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

Khi bạn chạy chương trình, đầu ra sẽ là:

 25axbz đến Int dài dài không dấu với cơ sở-11 = 307 Chuỗi cuối = xbz -110bcd đến Int dài dài không dấu với cơ sở-2 = 18446744073709551610 Chuỗi cuối = bcd ax110,97 đến Chuỗi dài không ký với cơ sở-10 = 0 Chuỗi cuối = ax110,97

Nếu cơ số là 0, cơ số số được xác định tự động bằng cách xem định dạng của chuỗi. Nếu tiền tố là 0, cơ số là bát phân (8). Nếu tiền tố là 0x hoặc 0X, thì cơ số là thập lục phân (16), nếu không thì cơ số là thập phân (10).

Ví dụ 4: Hàm strtoull () với cơ số 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; )

Khi bạn chạy chương trình, đầu ra sẽ là:

 017x thành Long Int không dấu với cơ sở-0 = 15 End String = x 0x1cg đến Unsigned Long Long Int với base-0 = 28 End String = g 70sxz thành Unsigned Long Int với base-0 = 70 End String = sxz

thú vị bài viết...