在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;
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值