2010-01-26 3 views
4

"const TCHAR"에 대한 유형이 지정된 포인터를 반환하는 클래스가 있습니다. std :: string으로 변환해야하지만이 방법을 찾지 못했습니다."const TCHAR에 대한 포인터"를 "std :: string"으로 어떻게 변환합니까?

누구든지 변환 방법에 대한 통찰력을 제공 할 수 있습니까? 당신의 컴파일 설정에 따라

+0

반환되는 TCHAR을 초기 값으로 사용하여 새로운 std :: string을 만듭니다. TCHAR xyz = fun(); 문자열 변환 된 형식 (xyz); ? – Leonidas

답변

10

, TCHAR입니다 중 하나 char 또는 WCHAR (또는 wchar_t).

멀티 바이트 문자열 설정을 사용하는 경우 TCHAR은 char과 동일합니다. 문자열을 TCHAR*으로 설정하면됩니다.

유니 코드 문자열 설정을 사용하는 경우 TCHAR은 와이드 문자이며 WideCharToMultiByte을 사용하여 변환해야합니다.

내가 생각하는 Visual Studio를 사용하는 경우 프로젝트 속성에서 문자 집합 아래에서이 설정을 변경할 수 있습니다.

+0

다음은 내가 한 일입니다. #if! defined (UNICODE) || !정의 된 (_UNICODE) const std :: string k_Var (reinterpret_cast (Var2.ReturnsAConstTCHAR())); #endif – TERACytE

+0

죄송합니다. "reinterpret_cast"가 아닌 "static_cast"를 읽어야합니다. – TERACytE

1

다릅니다. 그런 다음이 방법은 여전히 ​​작동 할 수 _UNICODEUNICODE을 사용하는 경우

const TCHAR example = _T('Q'); 
std::string mystring(1, example); 

하지만 캐릭터에 convertable하지 않을 수 있습니다 : 당신이 _UNICODE 또는 UNICODE을 정의하지 않은 경우에 당신은이 같은 문자를 포함하는 문자열을 만들 수 있습니다 a char. 이 경우 문자를 문자열로 변환해야합니다. 일반적으로 wcstombs 또는 WideCharToMultiByte과 같은 전화를 사용해야 인코딩을 더 완벽하게 제어 할 수 있습니다.

어느 쪽이든 결과에 대한 버퍼를 할당하고이 버퍼에서 std::string을 구성해야합니다. 완료되면 버퍼를 할당 해제해야합니다 (또는 자동으로 발생하도록 vector<char>과 같은 것을 사용하십시오).

3

브라이언이 말한 모든 것을 수행하십시오. 당신이 필요로하는 코드 페이지에 그것을 얻을되면, 당신은 할 수 있습니다 :

std::string s(myTchar, myTchar+length); 

또는

std::wstring s(myTchar, myTchar+length); 

문자열로 그것을 얻을 수 있습니다.

3

는 또한 와이드에 :,이를 위해

std::wstring str = CT2W(_T("A TCHAR string")); 

CT2W = 헌장 텍스트 예컨대을 편리 ATL 텍스트 변환 매크로를 사용할 수 있습니다.

변환을위한 코드 페이지를 지정할 수도 있습니다. (현재의 형태로)

std::wstring str = CT2W(_T("A TCHAR string"), CP_SOMECODEPAGE); 

이 매크로는 VS2005 이후 비주얼 스튜디오 C++ 프로젝트에 사용할 수 있었다.