Chinaunix首页 | 论坛 | 博客
  • 博客访问: 496198
  • 博文数量: 80
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1916
  • 用 户 组: 普通用户
  • 注册时间: 2013-07-11 22:01
个人简介

从事实时计算多年,熟悉jstorm/spark/flink/kafka/rocketMq, 热衷于开源,希望在这里和前辈们一起学习与分享,得到长足的进步!邮箱:hustfxj@gmail.com 我的githup地址是:https://github.com/hustfxj。欢迎和大家一起交流探讨问题。

文章分类

全部博文(80)

文章存档

2017年(11)

2015年(3)

2014年(33)

2013年(33)

分类: C/C++

2014-02-18 15:06:03

方法一:使用ATL宏

有比MultiByteToWideChar和WideCharToMultiByte更简单的字符串转换宏,你相信吗?
头文件
d:/program files/microsoft visual studio 8/vc/atlmfc/include/atlconv.h
如果要使用ATL字符串转换宏,请先定义
USES_CONVERSION;  // 只需要调用一次,就可以在函数中进行多次转换
下面一个例子:
    USES_CONVERSION;  // 只需要调用一次,就可以在函数中进行多次转换
    char a[12] = "china";
    ::MessageBoxW( NULL, A2W(a), L"", MB_ICONASTERISK|MB_TASKMODAL|MB_OK );
使用 ATL 转换宏,由于不用释放临时空间,所以使用起来非常方便。但是考虑到栈空间的尺寸(VC 默认2M),使用时要注意几点:
    1、只适合于进行短字符串的转换;
    2、不要试图在一个次数比较多的循环体内进行转换;
    3、不要试图对字符型文件内容进行转换,因为文件尺寸一般情况下是比较大的;
    4、对情况 2 和 3,要使用 MultiByteToWideChar() 和 WideCharToMultiByte();
 
A2BSTR OLE2A T2A W2A
A2COLE OLE2BSTR T2BSTR W2BSTR
A2CT OLE2CA T2CA W2CA
A2CW OLE2CT T2COLE W2COLE
A2OLE OLE2CW T2CW W2CT
A2T OLE2T T2OLE W2OLE
A2W OLE2W T2W W2T

上表中的宏函数,其实非常容易记忆:

2

好搞笑的缩写,to 的发音和 2 一样,所以借用来表示“转换为、转换到”的含义。

A

ANSI 字符串,也就是 MBCS。

W、OLE

宽字符串,也就是 UNICODE。

T

中间类型T。如果定义了 _UNICODE,则T表示W;如果定义了 _MBCS,则T表示A

C

const 的缩写

方法二:使用WideCharToMultiByte和MultiByteToWideChar

使用一个例子说明:

下面是将 strText 中的unicode字符串转换成ASC||方法  ,也是CString 转换为char * 的方法

char *lText;

int iTexLen;

iTextLen=WideCharToMultiByte(CP_ACP,0,strText,-1,NULL,0,NULL,0);/确定strText中的CString转换为ASCII后,所需的字节数

 lText=(char*)calloc(iTextLen,sizeof(char)); // 分配空间

 memset(lText,0,iTextLen*sizeof(char));  //初始化空间

WideCharToMultiByte(CP_ACP,0,strText,-1,lText,iTextLen,NULL,0);  // 将strText中的字符串全部转换成ASCII,并将其保存在lText开辟的字符空间中

 file.Write(lText,iTextLen); //  将转换好的ASCII文字串  保存到文件中 

 file.Close();
 free(lText);

方法三:wcstombs()和wctomb()

方法四:CString

CString
     MFC中的CString包含有构造函数和接受Unicode串的赋值操作,所以你可以用CString来实现转换。例如:

// 假设有一个Unicode串wszSomeString...

CString str1 ( wszSomeString ); // 用构造器转换
CString str2;

str2 = wszSomeString; // 用赋值操作转换

阅读(12882) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~