在UNICODE环境下由CSteing转换为string的方法

比如在MFC下用TinyXml写xml文件时编辑的代码

try
    {
        TiXmlDocument *myDocument = new TiXmlDocument();
        TiXmlElement *RootElement = new TiXmlElement("Persons");
        myDocument->LinkEndChild(RootElement);
        TiXmlElement *PersonElement = new TiXmlElement("Person");
        RootElement->LinkEndChild(PersonElement);
        PersonElement->SetAttribute("ID", "1");
        PersonElement->SetAttribute("other", "info");
        TiXmlElement *NameElement = new TiXmlElement("name");
        TiXmlElement *AgeElement = new TiXmlElement("age");
        PersonElement->LinkEndChild(NameElement);
        PersonElement->LinkEndChild(AgeElement);
        TiXmlText *NameContent = new TiXmlText("Michael");
        TiXmlText *AgeContent = new TiXmlText("23");
        NameElement->LinkEndChild(NameContent);
        AgeElement->LinkEndChild(AgeContent);
        CString appPath = GetAppPath();
        string seperator = "\\";
        string fullPath = appPath.GetBuffer(0) + seperator + szFileName;
        myDocument->SaveFile(fullPath.c_str());
        delete myDocument;
    }
    catch (string& e)
    {
        return false;
    }
    return true;

上面这个代码给我报错,经查询是CString需要转换为string类型,经查询网上给的可行转换方法如下:

CString src = _T("你好");
CStringA temp = src.GetBuffer(0);
string text = temp.GetBuffer(0);

但是在有些情况下还是会报同样的错,和没转换一个样,这个问题需要将上面的代码改写,改写为:

CString src;
CStringA temp;
string text;
src = _T("你好");
temp = src.GetBuffer(0);
text = temp.GetBuffer(0);

及改后代码为:

try
    {
        TiXmlDocument *myDocument = new TiXmlDocument();
        TiXmlElement *RootElement = new TiXmlElement("Persons");
        myDocument->LinkEndChild(RootElement);
        TiXmlElement *PersonElement = new TiXmlElement("Person");
        RootElement->LinkEndChild(PersonElement);
        PersonElement->SetAttribute("ID", "1");
        PersonElement->SetAttribute("other", "info");
        TiXmlElement *NameElement = new TiXmlElement("name");
        TiXmlElement *AgeElement = new TiXmlElement("age");
        PersonElement->LinkEndChild(NameElement);
        PersonElement->LinkEndChild(AgeElement);
        TiXmlText *NameContent = new TiXmlText("Michael");
        TiXmlText *AgeContent = new TiXmlText("23");
        NameElement->LinkEndChild(NameContent);
        AgeElement->LinkEndChild(AgeContent);
        CString appPath;
        CStringA temp;
        string appPathtext;
        appPath = GetAppPath();
        temp = appPath.GetBuffer(0);
        appPathtext = temp.GetBuffer(0);
        string seperator = "\\";
        string fullPath = appPathtext + seperator + szFileName;
        myDocument->SaveFile(fullPath.c_str());
        delete myDocument;
    }
    catch (string& e)
    {
        return false;
    }
    return true;
posted @   XZshijian  阅读(2)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示