博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
将ASCII字符串转换为UNICODE字符串
阅读量:5977 次
发布时间:2019-06-20

本文共 1370 字,大约阅读时间需要 4 分钟。

写在前面的话:在MFC的网络编程中,由于现在项目都是使用UNICODE编码,但是网络API的许多函数却只能接受const char*的参数,所以经常会遇到需要将char*转换为TCHAR*的时候,有一个函数可以实现,但是用起来比较麻烦,所以自己就对它进行了封装,形成自己的函数,记下来,以备后用。

函数很简单,代码如下:

1 TCHAR* CServerDlg::AsciiToUnicode(char *str)2 {3     DWORD dwNum = 0;4     dwNum = MultiByteToWideChar(CP_ACP, 0, str, -1, NULL, 0);5     TCHAR* pwHostName = new TCHAR[dwNum];6     MultiByteToWideChar(CP_ACP, 0, str, -1, pwHostName, dwNum);7     return pwHostName;8 }

使用此函数时,只需要传入需要转换的char数组就可以了,返回一个TCHAR*的指针,需要注意的是,因为返回的是一个指向动态生成的字符数组,因此在得到返回值之后应该立刻拷贝下来,然后将指针指向的内存区销毁,以免造成内存泄漏,用C++最需要注意这一点了,一不小心就会内存泄漏。

 补充:

cstdlib中也提供了编码转换函数,如下:

mbtowc : 将多字节字符转换为wchar_t

wctomb : 将wchar_t转换为多字节字符

mbstowcs : 将多字节字符串转换为wchar_t字符串

wcstombs : 将wchar_t字符串转换为多字节字符串

当然UNICODE字符集同多字节字符集之间的转换还可以使用windows提供的转换函数WideCharToMultiByte()和MultiByteToWideChar()来完成,函数原型如下:

1 int WideCharToMultiByte( 2     UINT CodePage, 3     DWORD dwFlags, 4     LPCWSTR lpWideCharStr, 5     int cchWideChar, 6     LPSTR lpMultiByteStr, 7     int cbMultiByte, 8     LPCSTR lpDefaultChar, 9     LPBOOL lpUserDefaultChar10 );11 12 int MultiByteToWideChar(13     UINT CodePage,14     DWORD dwFlags,15     LPCSTR lpMultiByteStr,16     int cbMultiByte,17     LPWSTR lpWideCharStr,18     int cchWideChar19 );

通常我们在使用时不知道转换后的字符串会占多大字节,所以可以先将参数cbMultiByte置为0,预先调用一次WideCharToMultiByte和MultiByteToWideChar函数,它们返回值即为目标字符串的字节大小,然后利用该大小作为参数cbMultiByte,再次调用函数即可。

转载地址:http://hhsox.baihongyu.com/

你可能感兴趣的文章
漫谈几种反编译对抗技术
查看>>
Timer 和 TimerTask 例子
查看>>
Spring BOOT 集成 RabbitMq 实战操作(一)
查看>>
安装python3.5注意事项及相关命令
查看>>
进程通信之无名信号量
查看>>
并发串行调用接口
查看>>
FileStream大文件复制
查看>>
Hibernate学习之SessionFactory的opensession 和 getCu...
查看>>
web网站服务(二)
查看>>
【第一期】网站打开错误问题解决方法集合
查看>>
j2ee开发防范URL攻击是个重要话题
查看>>
RSync实现文件备份同步
查看>>
如何判断一个服务是否正在运行
查看>>
精品软件 推荐 相当优秀的轻量级文本编辑器 Notepad2
查看>>
Lync 2013快速入门手册之三:组织Lync会议
查看>>
SQL SERVER 2008 表与约束的创建维护
查看>>
我的友情链接
查看>>
zabbix企业应用之监控mysql 5.6版本
查看>>
BGP选路原则与专有命令的研究
查看>>
CMD 修改Host文件 BAT
查看>>