當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


C++ strtoull()用法及代碼示例


C++ 中的strtoull() 函數將字符串的內容解釋為指定基數的整數,並將其值作為 unsigned long long int. 返回

C++ 中的strtoull() 函數將字符串的內容解釋為指定基數的整數,並將其值作為 unsigned long long int. 返回

該函數還設置一個指針,指向字符串的最後一個有效字符之後的第一個字符(如果有),否則該指針設置為空。

For base 10 and the string "41aac"
 
Valid numeric part -> 42
First character after valid numeric part -> a

strtoull() 原型 [從 C++ 11 標準開始]

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

strtoull() 函數接受字符串、指向字符的指針和整數值 - 基數作為其參數,將字符串的內容解釋為給定基數的整數,並返回一個無符號長整型整數值。

該函數在<cstdlib> 頭文件中定義。

參數:

  • str: 具有整數表示的字符串。
  • end: 對已分配的 char* 類型對象的引用。 end 的值由函數設置為 str 中最後一個有效字符之後的下一個字符。該參數也可以是空指針,在這種情況下不使用。
  • base: 整數值的基數。 base 的有效值集是 {0, 2, 3, ..., 35, 36}。

返回:

strtoull() 函數返回:

  • 一個無符號的 long long int 值(從字符串轉換而來)。
  • 如果無法執行有效轉換,則為 0。

示例 1:strtoull() 函數如何工作?

#include <iostream>
#include <cstdlib>
#include <cstring>
 
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;
}

運行程序時,輸出將是:

String value = 231ax12
Unsigned Long long int value = 231
End String = ax12
String value = 231
Unsigned Long long int value = 231
Null pointer

strtoull() 函數的有效整數值包括:

  • 可選的 + 或 - 符號。
  • 八進製基數的前綴 0(僅在基數 = 8 或 0 時適用)。
  • 十六進製基數的前綴 0x 或 0X(僅在基數 = 16 或 0 時適用)。
  • 一係列數字和/或字母(如果基數大於 10)。

如果參數在開頭包含減號 (-),則負數會隱式轉換為 unsigned long long int 類型,即正數。

參數 base 的有效值為 {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 <iostream>
#include <cstdlib>
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 Unsigned Long Long Int with base-5 = 9
End String = 8ax
 
148ax to Unsigned Long Long Int with base-15 = 4405
End String = x
 
148ax to Unsigned Long Long Int with base-35 = 1682308
End String =

strtoull() 函數會忽略所有前導空白字符,直到找到主要的非空白字符。

通常,strtoull() 函數的有效整數參數具有以下形式:

[whitespace] [- | +] [0 | 0x] [alphanumeric characters]

然後,從這個字符開始,它需要盡可能多的字符來形成一個有效的整數表示,並將它們轉換為一個 long long int 值。在最後一個有效字符之後字符串的剩餘部分將被忽略並且對結果沒有影響。

示例 3:strtoull() 函數用於前導空格、減號和無效轉換

#include <iostream>
#include <cstdlib>
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 to Unsigned Long Long Int with base-11 = 307
End String = xbz
 
  -110bcd to Unsigned Long Long Int with base-2 = 18446744073709551610
End String = bcd
 
ax110.97 to Unsigned Long Long Int with base-10 = 0
End String = ax110.97

如果基數為 0,則通過查看字符串的格式自動確定數字基數。如果前綴為 0,則基數為八進製 (8)。如果前綴為 0x 或 0X,則基數為十六進製 (16),否則基數為十進製 (10)。

示例 4:strtoull() 以 0 為基數的函數

#include <iostream>
#include <cstdlib>
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 to Unsigned Long Long Int with base-0 = 15
End String = x
 
0x1cg to Unsigned Long Long Int with base-0 = 28
End String = g
 
70sxz to Unsigned Long Long Int with base-0 = 70
End String = sxz

相關用法


注:本文由純淨天空篩選整理自 C++ strtoull()。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。