Конвертировать 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;
}