Вопрос

Я хочу преобразовать CSTRING в String. (Да. Я знаю, что я делаю. Я знаю, что возвращаемая строка будет неверной, если диапазон значений 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?

Это было полезно?

Решение

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

Другие советы

Поскольку вы не заботитесь о персонажах за пределами диапазона ANSI, Brute Force будет работать.

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;
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top