2016-10-23 8 views
0

싫어하는 것,UWP 문자열을 정수로 변환

Google로 모든 것을 살펴 봤지만 답을 찾을 수 없습니다.

C++을 사용하여 Universal Windows Platform (UWP)에서 문자열 "5"를 정수 5로 변환하려면 어떻게해야합니까?

저는 이미 (String ^)로 변환하려고 했으므로 무의미하다는 것을 알고 있지만 UWP에 대해서는 전혀 알지 못합니다.

msdn 설명서는 형식 변환에 대해 설명하지 않으며 어디에서나 찾을 수 없습니다. String => wchar_t => char -> atoi와 같은 것을하고 싶지 않습니다. 이 방법이 더 좋습니까? 아니면이 긴 추억의 과정을해야합니까?

편집 : 표시 한 것과 동일하지 않습니다 ... 표시하기 전에 내 설명을 읽을 수 있습니까? 보내 주신 링크는 std :: string을 정수로 변환하는 것입니다. 문자열을 변환하는 방법을 알아야합니다^int (int32)

+1

@Sam을 : 나는 그가'int' → 문자열을 변환하는 방법에 대한 요구 생각하지 않습니다 일반적으로 특별한 경우 인 UWP'String ^'→'int'입니다. 그리고 그것은 잠재적 복제본 (즉, http://stackoverflow.com/questions/194465/how-to-parse-a-string-to-an-int-in-c)에 포함되지 않습니다. –

+0

'Platform :: String :: Data' 멤버 함수가 일반적인 문자열을'std :: stoi'와 같은 int 메소드로 사용할 수 있다고 생각합니다. See (http://stackoverflow.com/questions/11746146/how-to-convert-platformstring-to-char). –

+0

글쎄, wcstol로 끝났지 만, C#처럼 ToInt와 같은 것을 생각했다. ... tol (str, wcs ..) 함수를 사용하지 않는 것 – Lukasas

답변

2

Platform::String (C++/CX에서는 String^으로 표시됨) 내부 버퍼에 const char16*을 반환하는 String::Data 멤버를 제공합니다. 그 다음 std::wcstol 같은, 표준 C 또는 C++ 문자열 변환 기능을 사용할 수 있습니다

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

['std :: stoi'] (http://en.cppreference.com/w/cpp/string/basic_string/stol)은 오류 검사를 제공하며 사용하기가 매우 쉽습니다. :) –

+0

@ Cheersandhth.-Alf : 실제로 그렇습니다. 그러나 오버 헤드없이 오버 헤드 변환을 생성하는 것은 옵티 마이저의 장점입니다. 'const std :: wstring'은 여분의 복사본을 할당해야 할 수도 있고하지 않을 수도 있습니다. 어쨌든, 나는 그것을 완성을 위해 추가 할 것이다. – IInspectable