UWP将字符串转换为整数

UWP Convert String to an Integer

本文关键字:整数 转换 字符串 UWP      更新时间:2023-10-16

问候语,

我一直在谷歌上查找所有内容,但就是找不到答案。

如何使用C++在通用Windows平台(UWP(中将字符串"5"转换为整数5?

我已经试过用(String^(来转换它,所以,我知道这毫无意义,但你永远不会知道UWP。

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

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

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