免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 13896 | 回复: 7
打印 上一主题 下一主题

如何解决char *类型和string类型的互相赋值问题,急!! [复制链接]

ltj0811 该用户已被删除
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-11-15 21:30 |只看该作者 |倒序浏览
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
2 [报告]
发表于 2005-11-15 21:38 |只看该作者
看得我都发蒙了!

论坛徽章:
0
3 [报告]
发表于 2005-11-15 23:00 |只看该作者
既然库是基于char*的, 你自然不能勉强自己的c++代码来适应这个库了...
最好还是有c++库的.

论坛徽章:
0
4 [报告]
发表于 2005-11-15 23:23 |只看该作者
//CodeConverter.h

#ifndef __CODE_CONVERTER__
#define __CODE_CONVERTER__

#include <iconv.h>
#include <iostream>

#define OUTLEN 255

namespace std{

        class CodeConverter {
                private:
                        iconv_t cd;
                public:
                        CodeConverter(const char *from_charset,
                                            const char *to_charset)
                        {
                                cd = iconv_open(to_charset,from_charset);
                        }

                        ~CodeConverter()
                        {
                                iconv_close(cd);
                                                            
                        }

                        // 转换输出
                int convert(char *inbuf,int inlen,char *outbuf,
                                    int outlen)
                        {
                                char **pin = &inbuf;
                                char **pout = &outbuf;

                                memset(outbuf,0,outlen);
                                return iconv(cd,pin,(size_t *)&inlen,
                                             pout,(size_t *)&outlen);
                        }
        };
}
#endif


//main.cpp
#include <iostream>
#include "CodeConverter.h"

using namespace std;

int main(int argc, char **argv)
{
        string in_utf8 = "姝e?ㄥ??瑁?";
        string in_gb2312 = "正在安装";
        char out[OUTLEN];

        // utf-8-->gb2312
        CodeConverter cc = CodeConverter("utf-8","gb2312");
        cc.convert(const_cast<char *>( in_utf8.c_str()),strlen(const_cast<char *
>( in_utf8.c_str())),out,OUTLEN);
        cout << "utf-8-->gb2312 in=" << in_utf8 << ",out=" << out << endl;

         // gb2312-->utf-8
        CodeConverter cc2 = CodeConverter("gb2312","utf-8");
        cc2.convert(const_cast<char*> (in_gb2312.c_str()),strlen(const_cast<char
*> (in_gb2312.c_str())) ,out,OUTLEN);
        cout << "gb2312-->utf-8 in=" << in_gb2312 << ",out=" << out << endl;
}
ltj0811 该用户已被删除
5 [报告]
发表于 2005-11-16 10:04 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
6 [报告]
发表于 2005-11-16 11:11 |只看该作者
string对象的c_str()只能读。用STL时觉得还是满不爽的:)

论坛徽章:
0
7 [报告]
发表于 2005-11-16 12:19 |只看该作者
原帖由 albcamus 于 2005-11-16 11:11 发表
string对象的c_str()只能读。用STL时觉得还是满不爽的:)


是不爽,这一点没有java好

论坛徽章:
0
8 [报告]
发表于 2005-11-16 12:20 |只看该作者
c和c++混合写就是成本很好,如果可以就不要用c++,不然真的很麻烦
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP