Greedings,
我一直在用谷歌查看所有内容,但我找不到答案。
我如何转换字符串" 5"使用C ++的通用Windows平台(UWP)中的整数5?
我已经尝试过将其转换为(String ^),因此,我知道它毫无意义,但你永远不会知道UWP。
msdn文档没有描述类型转换的任何内容,我在任何地方都找不到它。我不想做像String ^ =>这样的事情。 wchar_t => char - >的atoi。有更好的方法吗?还是我必须做这个漫长的记忆过程?
编辑: 它与你标记的不一样......你能在标记之前阅读我的描述吗?您发送的链接是将std :: string转换为整数,这很容易,但我需要知道如何将String转换为int(int32)
答案 0 :(得分:2)
Platform::String(在C ++ / CX中表示为String^
)提供String::Data成员,它将const char16*
返回到内部缓冲区。然后它可以与任何标准C或C ++字符串转换函数一起使用,例如std::wcstol:
long ToLong( String^ str ) {
const wchar_t* begin = str->Data();
return std::wcstol( begin, nullptr, 10 );
}
或者,如果您想实现一些错误处理,并确保解释整个字符串,您可以写:
long ToLong( String^ str ) {
const wchar_t* begin = str->Data();
const wchar_t* end = str->Data() + std::wcslen( str->Data() );
wchar_t* last_interpreted{ nullptr };
long l = std::wcstol( begin, &last_interpreted, 10 );
if ( last_interpreted != end ) {
throw ref new InvalidArgumentException();
}
return l;
}
注意,没有分配额外的内存。转换函数对Platform::String
的存储序列进行操作。
如果您可以省去潜在的临时内存分配,可以使用std::stol,并免费获得正确的错误报告:
long ToLong( String^ str ) {
return std::stol( { str->Data(), str->Length() } );
}