C++ 将CString转换为字符串(VC6)

C++ 将CString转换为字符串(VC6),c++,visual-c++,visual-c++-6,C++,Visual C++,Visual C++ 6,我想把CString转换成string。(是的,我知道我在做什么。我知道如果CString值范围超出ANSI,返回的字符串将不正确,但这没关系!) 以下代码将在VC2008下工作 std::string Utils::CString2String(const CString& cString) { // Convert a TCHAR string to a LPCSTR CT2CA pszConvertedAnsiString (cString); // c

我想把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中都能正常工作?

微软这么说,所以试试后者,看看是否能正常工作。

既然你不关心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;
}
std::string Utils::CString2String(const-CString&CString)
{
std::字符串strStd;
对于(int i=0;iif(cString[i]你在编译Unicode吗?也就是说,cString包含Unicode字符吗?还有,为什么你要使用VC6?它已经有12年历史了!!我们用Unicode和多字节编译。嘿!听说过“庞大的遗留代码库”吗?使用_转换;std::string str=T2CA((LPCTSTR)cString));