Конвертировать CString в строку (VC6)

Я хочу конвертировать 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 ответа

Решение

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

Поскольку вас не волнуют символы вне диапазона 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;
}
Другие вопросы по тегам