2010-06-02 2 views
3

CString을 string으로 변환하려고합니다. (그래, 내가 뭘하는지 알지. 반환 된 문자열을 CString 값 범위가 ANSI 밖에있는 경우 올바르지 만, 그건 괜찮아요!)CString을 문자열 (VC6)로 변환

다음 코드는 VC2008에서 작동합니다.

std::string Utils::CString2String(const CString& cString) 
{ 
    // Convert a TCHAR string to a LPCSTR 
    CT2CA pszConvertedAnsiString (cString); 

    // construct a std::string using the LPCSTR input 
    std::string strStd (pszConvertedAnsiString); 

    return strStd; 
} 

그러나 VC6에는 CT2CA 매크로가 없습니다. VC6과 VC2008 모두에서 작동하도록 코드를 만들 수 있습니까?

+0

유니 코드를 컴파일하고 있습니까? 즉, CString은 유니 코드 문자를 포함합니까? 또한, 왜 오 ** ** VC6를 사용하고 있습니까? 12 살이야 !! –

+0

유니 코드와 멀티 바이트 모두를 컴파일합니다. 이봐 요! "거대한 레거시 코드베이스"에 대해 들어 본 적이 있습니까? –

답변

4

마이크로 소프트는 CT2CA replaces T2CA이라고 말합니다. 따라서 후자를 시도해보고 작동하는지 확인하십시오.

+1

USES_CONVERSION; std :: string str = T2CA ((LPCTSTR) cString)); – Gunslinger47

1

ANSI 범위를 벗어나는 문자는 신경 쓰지 않으므로 무차별 대항력이 적용됩니다.

std::string Utils::CString2String(const CString& cString) 
{ 
    std::string strStd; 

    for (int i = 0; i < cString.GetLength(); ++i) 
    { 
     if (cString[i] <= 0x7f) 
      strStd.append(1, static_cast<char>(cString[i])); 
     else 
      strStd.append(1, '?'); 
    } 

    return strStd; 
}