当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


C++ wcstoul()用法及代码示例


C++ 中的wcstoul() 函数将宽字符串的内容解释为指定基数的无符号整数,并将其值返回为无符号长整数 int.

wcstoul() 函数还设置一个指针,指向宽字符串的最后一个有效字符(如果有)之后的第一个字符,否则该指针设置为空。

For base 10 and the wide string L"29hi$"
Valid numeric part -> 29
First character after valid numeric part -> h

它在<cwchar> 头文件中定义。

wcstoul()原型

unsigned long wcstoul( const wchar_t* str, wchar_t** str_end, int base );

wcstoul() 函数将宽字符串 str 、指向宽字符 str_end 的指针和整数值 - base 作为其参数。

然后它将宽字符串的内容解释为给定 base 的无符号整数,并返回一个无符号长整型值。

参数:

  • str :具有无符号整数表示的宽字符串。
  • str_end:指向宽字符指针的指针。 str_end 的值由函数设置为 str 中最后一个有效字符之后的下一个字符。该参数也可以是空指针,在这种情况下不使用。
  • base :整数值的基数。 base 的有效值集是 {0, 2, 3, ..., 35, 36}。

返回:

wcstoul() 函数返回:

  • 一个无符号的 long int 值(从字符串转换而来)。
  • 如果无法执行有效转换,则为 0。

示例 1:wcstoul() 函数如何工作?

#include <cwchar>
#include <clocale>
#include <iostream>
using namespace std;

int main()
{
	setlocale(LC_ALL, "en_US.UTF-8");
	
	wchar_t str1[] = L"101aa\u16b6";
	wchar_t str2[] = L"59";
	wchar_t *end;
	unsigned long value;
	int base = 10;
	
	value = wcstoul(str1, &end, base);
	wcout << L"String value = " << str1 << endl;
	wcout << L"Unsigned Long Int value = " << value << endl;
	wcout << L"End String = " << end << endl;
	
	value = wcstoul(str2, &end, base);
	wcout << L"String value = " << str2 << endl;
	wcout << L"Unsigned Long Int value = " << value << endl;
	wcout << L"End String = " << end << endl;
	
	return 0;
}

运行程序时,输出将是:

String value = 101aaᚶ
Unsigned Long Int value = 101
End String = aaᚶ
String value = 59
Unsigned Long Int value = 59
End String =

wcstoul() 函数的有效整数值包括:

  • 可选的 + 或 - 符号。
  • 八进制基数的前缀 0(仅在基数 = 8 或 0 时适用)。
  • 十六进制基数的前缀 0x 或 0X(仅在基数 = 16 或 0 时适用)。
  • 一系列数字和/或字母(如果基数大于 10)。

如果参数在开头包含减号 (-),则负数将隐式转换为无符号 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:wcstoul() 具有不同基数的函数

#include <cwchar>
#include <clocale>
#include <iostream>
using namespace std;

int main()
{
	setlocale(LC_ALL, "en_US.UTF-8");
	wchar_t *end;
	wchar_t str[] = L"311bz\u03fe\u03ff";

	wcout << str << L" to Unsigned Long Int with base-5 = " << wcstoul(str, &end, 5) << endl;
	wcout << L"End String = " << end << endl << endl;
	wcout << str << L" to Unsigned Long Int with base-12 = " << wcstoul(str, &end, 12) << endl;
	wcout << L"End String = " << end << endl << endl;
	wcout << str << L" to Unsigned Long Int with base-36 = " << wcstoul(str, &end, 36) << endl;
	wcout << L"End String = " << end << endl << endl;
	
	return 0;
}

运行程序时,输出将是:

311bzϾϿ to Unsigned Long Int with base-5 = 81
End String = bzϾϿ
311bzϾϿ to Unsigned Long Int with base-12 = 5351
End String = zϾϿ
311bzϾϿ to Unsigned Long Int with base-36 = 5087231
End String = ϾϿ

wcstoul() 函数会忽略所有前导空白字符,直到找到主要的非空白字符。

通常,wcstoul() 函数的有效整数参数具有以下形式:

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

然后,从这个字符开始,它需要尽可能多的字符来形成一个有效的整数表示,并将它们转换为一个 unsigned long int 值。

在最后一个有效字符之后字符串的剩余部分将被忽略并且对结果没有影响。

示例 3:wcstoul() 函数用于前导空格和无效转换

#include <cwchar>
#include <clocale>
#include <iostream>
using namespace std;

int main()
{
	setlocale(LC_ALL, "en_US.UTF-8");
	wchar_t *end;
	
	wcout << L" 205\u03e2x to Unsigned Long Int with base-5 = " << wcstoul(L" 205\u03e2x", &end, 5) << endl;
	wcout << L"End String = " << end << endl << endl;
	wcout << L"x\u019cz201 to Unsigned Long Int with base-12 = " << wcstoul(L"x\u019cz201", &end, 12) << endl;
	wcout << L"End String = " << end << endl << endl;
	
	return 0;
}

运行程序时,输出将是:

205Ϣx to Unsigned Long Int with base-5 = 10
End String = 5Ϣx
xƜz201 to Unsigned Long Int with base-12 = 0
End String = xƜz201

如果 base 为 0,则通过查看字符串的格式自动确定数字基数。如果前缀为 0,则 base 为八进制 (8)。如果前缀为 0x 或 0X,则 base 为十六进制 (16),否则基数为十进制 (10)。

示例 4:wcstoul() 以 0 为基数的函数

#include <cwchar>
#include <clocale>
#include <iostream>
using namespace std;

int main()
{
	setlocale(LC_ALL, "en_US.UTF-8");
	
	wchar_t *end;
	wcout << L"0539\u1e84 to Unsigned Long Int with base-0 = " << wcstoul(L"0539\u1e84", &end, 0) << endl;
	wcout << L"End String = " << end << endl << endl;
	wcout << L"0xa31\u05e2 to Unsigned Long Int with base-0 = " << wcstoul(L"0xa31\u05e2", &end, 0) << endl;
	wcout << L"End String = " << end << endl << endl;
	wcout << L"119x\u060f to Unsigned Long Int with base-0 = " << wcstoul(L"119x\u060f", &end, 0) << endl;
	wcout << L"End String = " << end << endl << endl;
	
	return 0;
}

运行程序时,输出将是:

0539Ẅ to Unsigned Long Int with base-0 = 43
End String = 9Ẅ
0xa31ע to Unsigned Long Int with base-0 = 2609
End String = ע
119x؏ to Unsigned Long Int with base-0 = 119
End String = x؏

相关用法


注:本文由纯净天空筛选整理自 C++ wcstoul()。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。