专职C++

不能停止的脚步

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  121 Posts :: 7 Stories :: 132 Comments :: 0 Trackbacks

常用链接

留言簿(13)

我参与的团队

搜索

  •  

最新评论

阅读排行榜

评论排行榜

60天内阅读排行

这函数,使用的是标准C函数。需要头文件cstdlib和clocale。针对中文的unicode写的函数。
        ///将中文Unicode转换为Ansi多字节字符串
        /**
            @param [out] paramDest 保存转换后的字符串
            @param [in] paramSource 原始的Unicode字符串
            @param [in] paramDestBytes 用于保存转换后字符串的内存字节数
            @return XInt 返回被转换后的字符个数(不含结尾0)
         
*/
        inline XInt ChineseUnicodeToMultByte(XChar 
* paramDest, const XWideChar * paramSource, XInt paramDestBytes)
        {
            XChar pCurLocale[
50];
            StringCopy(pCurLocale,setlocale(LC_ALL,NULL),
49);
            setlocale(LC_ALL,
"chs");
            size_t iByteCount 
= wcstombs(paramDest, paramSource, paramDestBytes);
            setlocale(LC_ALL, pCurLocale);
            
return (XInt)iByteCount;
        }
        
///将中文Ansi多字节转换为Unicode字符串
        /**
            @param [out] paramDest 保存转换后的字符串
            @param [in] paramSource 原始的Unicode字符串
            @param [in] paramDestBytes 用于保存转换后字符串的内存字节数
            @return XInt 返回被转换后的字符个数(不含结尾0)
         
*/
        inline XInt ChineseMultByteToUnicode(XWideChar 
* paramDest, const XChar * paramSource,XInt paramDestByte)
        {
            setlocale(LC_ALL, 
"chs"); 
            size_t iByteCount 
= mbstowcs(paramDest, paramSource, paramDestByte);
            setlocale(LC_ALL,
"C");
            
return (XInt)iByteCount;
        }
这两个函数,已经融合到我的那个字符串XWideString和XAnsiString中,它这两个字符串相互转换非常容易。具体语言的参考,可以查看MSDN。
这两个函数算是对wcstombs和mbstowcs的一个使用例子吧。

posted on 2010-11-01 14:07 冬瓜 阅读(3310) 评论(6)  编辑 收藏 引用 所属分类: 原创

Feedback

# re: 一则C++Unicode集与多字节转换函数使用。 2010-11-02 10:20 陈梓瀚(vczh)
嘛,其实还有API的WideCharToMultiBytes, MultiBytesToWideChar,功能更强大,使用更方便……  回复  更多评论
  

# re: 一则C++Unicode集与多字节转换函数使用。 2010-11-03 02:56 冬瓜
这个我知道,但它只能在windows下面运行。而我的目标是要在linux和windows下都能运行。@陈梓瀚(vczh)
  回复  更多评论
  

# re: 一则C++Unicode集与多字节转换函数使用。 2010-11-05 09:52 天下
独立出来吧,不要绑定你的字符串类,
项目中一般不用自定义的字符串类.

还有.linux下有iconv这库.
  回复  更多评论
  

# re: 一则C++Unicode集与多字节转换函数使用。 2010-11-05 13:38
你想要做全,就把UTF8和UTF32也做进去。
你这个设计的耦合性有问题,你自己的字符串类型不应该耦合在这样的函数上。
如果要跨平台,也应该在不同的平台上做不同的实现是最好的办法。  回复  更多评论
  

# re: 一则C++Unicode集与多字节转换函数使用。 2010-11-05 16:13 冬瓜
经验与精力,都有限。主要的要求,满足我在windows和linux下开发即可。@酿
  回复  更多评论
  

# re: 一则C++Unicode集与多字节转换函数使用。 2010-11-05 16:18 冬瓜
我这个是做到与这个微型库一起的,独立出来,没有什么意义。
这个函数,没有与我的字符串绑定,连std::string都没有一起绑定。StringCopy是一个字符串复制函数,在Release下面经优化后,比strcpy还要快。
@天下
  回复  更多评论
  


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理