Преобразовать CSTRING в String (VC6)
-
23-10-2019 - |
Вопрос
Я хочу преобразовать 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;
}
Не связан с StackOverflow