Преобразовать CString в строку (VC6) - PullRequest
3 голосов
/ 02 июня 2010

Я хочу преобразовать CString в строку. (Да. Я знаю, что я делаю. Я знаю, что возвращенная строка будет неправильной, если диапазон значений CString находится вне ANSI, но это нормально!)

Следующий код будет работать под 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?

Ответы [ 2 ]

4 голосов
/ 02 июня 2010

Microsoft говорит, что CT2CA заменяет T2CA , поэтому попробуйте последнее и посмотрите, работает ли оно.

1 голос
/ 02 июня 2010

Поскольку вам не нужны символы вне диапазона 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;
}
...