UWP将字符串转换为整数

时间:2016-10-23 22:57:51

标签: c++ uwp c++-cx

Greedings,

我一直在用谷歌查看所有内容,但我找不到答案。

我如何转换字符串" 5"使用C ++的通用Windows平台(UWP)中的整数5?

我已经尝试过将其转换为(String ^),因此,我知道它毫无意义,但你永远不会知道UWP。

msdn文档没有描述类型转换的任何内容,我在任何地方都找不到它。我不想做像String ^ =>这样的事情。 wchar_t => char - >的atoi。有更好的方法吗?还是我必须做这个漫长的记忆过程?

编辑: 它与你标记的不一样......你能在标记之前阅读我的描述吗?您发送的链接是将std :: string转换为整数,这很容易,但我需要知道如何将String转换为int(int32)

1 个答案:

答案 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() } );
}