如何在C++11中将u32string
转换为int
?
另外,我应该使用什么方法将这样的字符串转换为int
-假设有开始和结束迭代器可用?
我试过了:
u32string test=U"14";
cout << atoi(test.c_str());
但它抛出:
candidate function not viable: no known conversion from 'const char32_t *' to 'const char *' for 1st argument
extern int atoi (__const char *__nptr)
3条答案
按热度按时间fxnxkyjh1#
这取决于UTF-8和使用相同数字表示法的“C”语言环境。
愚者的标准库实现libstdc还不包括codecvt头文件或std::wstring_convert。libc包括这两个,就像Visual Studio的标准库实现一样。如果你必须使用libstdc++,你会发现自己实现一个简单的转换函数是最简单的。
5n0oy7gb2#
编辑是因为我的第一个答案很愚蠢。
这是我设法做的,但它可能不是很有效,它假设你的字符串是有效的。
vmdwslir3#
没有标准的库函数,但谢天谢地,它很容易实现。
下面是一个示例,说明如何以一种通用的方式进行转换,而无需进行代价高昂的
std::string
转换。parse_int
函数可与u16string
、u32string
、u8string
、string
和wstring
一起使用,利用了在所有字符类型中使用相同值表示数字的事实。Live demo