Question

I want to convert CString to string. (Yup. I know what am I doing. I know the returned string will be incorrect, if CString value range is outside ANSI, but That's Is OK!)

The following code will work under 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;
}

But VC6 doesn't have CT2CA macro. How I can make the code to work as well in both VC6 and VC2008?

Was it helpful?

Solution

Microsoft says that CT2CA replaces T2CA, so try the latter and see if that works.

OTHER TIPS

Since you don't care about characters outside the ANSI range, brute force would work.

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;
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top