将ASCII字符串转换为UNICODE字符串
写在前面的话:在MFC的网络编程中,由于现在项目都是使用UNICODE编码,但是网络API的许多函数却只能接受const char*的参数,所以经常会遇到需要将char*转换为TCHAR*的时候,有一个函数可以实现,但是用起来比较麻烦,所以自己就对它进行了封装,形成自己的函数,记下来,以备后用。
函数很简单,代码如下:
TCHAR* CServerDlg::AsciiToUnicode(char *str)
{
DWORD dwNum = ;
dwNum = MultiByteToWideChar(CP_ACP, , str, -, NULL, );
TCHAR* pwHostName = new TCHAR[dwNum];
MultiByteToWideChar(CP_ACP, , str, -, pwHostName, dwNum);
return pwHostName;
}
使用此函数时,只需要传入需要转换的char数组就可以了,返回一个TCHAR*的指针,需要注意的是,因为返回的是一个指向动态生成的字符数组,因此在得到返回值之后应该立刻拷贝下来,然后将指针指向的内存区销毁,以免造成内存泄漏,用C++最需要注意这一点了,一不小心就会内存泄漏。
补充:
cstdlib中也提供了编码转换函数,如下:
mbtowc : 将多字节字符转换为wchar_t
wctomb : 将wchar_t转换为多字节字符
mbstowcs : 将多字节字符串转换为wchar_t字符串
wcstombs : 将wchar_t字符串转换为多字节字符串
当然UNICODE字符集同多字节字符集之间的转换还可以使用windows提供的转换函数WideCharToMultiByte()和MultiByteToWideChar()来完成,函数原型如下:
int WideCharToMultiByte(
UINT CodePage,
DWORD dwFlags,
LPCWSTR lpWideCharStr,
int cchWideChar,
LPSTR lpMultiByteStr,
int cbMultiByte,
LPCSTR lpDefaultChar,
LPBOOL lpUserDefaultChar
); int MultiByteToWideChar(
UINT CodePage,
DWORD dwFlags,
LPCSTR lpMultiByteStr,
int cbMultiByte,
LPWSTR lpWideCharStr,
int cchWideChar
);
通常我们在使用时不知道转换后的字符串会占多大字节,所以可以先将参数cbMultiByte置为0,预先调用一次WideCharToMultiByte和MultiByteToWideChar函数,它们返回值即为目标字符串的字节大小,然后利用该大小作为参数cbMultiByte,再次调用函数即可。
将ASCII字符串转换为UNICODE字符串的更多相关文章
- Python Cookbook(第3版)中文版:15.15 C字符串转换为Python字符串
15.15 C字符串转换为Python字符串¶ 问题¶ 怎样将C中的字符串转换为Python字节或一个字符串对象? 解决方案¶ C字符串使用一对 char * 和 int 来表示, 你需要决定字符串到 ...
- Python:Base1(数据类型,print语句,变量,定义字符串,raw字符串与多行字符串,Unicode字符串,整数和浮点数运算,布尔类型运算)
1.Python中数据类型: 计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值.但是,计算机能处理的远不止数值,还可以处理文本.图形.音频.视频.网页等各种各样的数据 ...
- javascript - 将字符串转换为模板字符串
参考: https://www.itranslater.com/qa/details/2325714161562551296 是否可以将模板字符串创建为常用字符串 let a="b:${b} ...
- C# 将普通字符串转换为二进制字符串
1.因为项目的需要,在向数据库中添加人的信息时,必须要求是英文或数字,所以想了个办法,将我们人能看懂的字符串编译成二进制字符串转入就行了. 具体的逻辑实现代码如下:
- 中文字符串转换为十六进制Unicode编码字符串
package my.unicode; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Uni ...
- 字符串与Unicode码的相互转换
//1,字符串转换为unicode码 var s = '吴'; //2,unicode码转字符串 '\u5434'.toString(16) //吴 或者 String.fromCharCode(21 ...
- Python中 字符串 转换为 字典
需求:把以下字符串转换为字典 #字符串 testStr = '{ "pName": "Ceshi", "gender": 1, " ...
- SSIS 无法在 unicode 和非 unicode 字符串数据类型之间转换
最近在学SSIS,遇到一个问题,把平面文件源的数据导入到EXCEL中. 平面文件源的对象是CSV,读进来的PhoneNumber是 DT_STR 然后倒入Excel 对应列建立的是longtext 一 ...
- UNICODE字符串与多字节字符串的转换
相互转换的两个函数的声明: 1. 多字节字符串与宽字符串的转换 int MultiByteToWideChar( UINT CodePage, // code page,一般设为 CP_ACP DWO ...
随机推荐
- 【实践】源代码分析工具Doxygen+Graphviz
拿到一个新项目或者一个开源框架,看源代码的方式不是先进行单步调试!最好的方式是先画出整个项目或者开源框架的类.协作.已经方法调用图,能够帮助你更快的理解框架或者项目的设计. 打包下载地址:http:/ ...
- 〖Linux〗Ubuntu13.10中打开键盘背光灯
刚刚从淘宝上买回一个带有Led背光的键盘(黑爵战神x5 背光升级版): 然后发现在Linux中背光灯并不亮,在Windows中就可以按下Scroll Lock键点亮: 在网上探索了一番,觉得应该可以使 ...
- poi读取execl的日期
当execl中的列为日期格式时,后台读取到是一个数字,通过如下代码可以直接读取并转换到Date类型 HSSFDateUtil.getJavaDate(cell.getNumericCellValue( ...
- Java 爬虫(获取指定页面中所有的邮箱地址)
import java.io.BufferedReader;import java.io.FileReader;import java.io.IOException;import java.io.In ...
- 【laravel5.4】发送alisms短信和163邮箱
public function test() { $res=ClientSource::all(); //dd($res); echo "<br>"; /* 发送短信[ ...
- 【mysql+RBAC】RBAC权限处理(转载:http://www.cnblogs.com/xiaoxi/p/5889486.html 平凡希)
1.这里我只讲核心,mysql查询语句:FIND_IN_SET(str,strlist) 2.具体教程可以参考[童攀老师的RBAC],很清晰,赞一个. 3.详解:mysql的find_in_set 首 ...
- pdo,更高的sql安全性
介绍 PHP 数据对象 (PDO) 扩展为PHP访问数据库定义了一个轻量级的一致接口.实现 PDO 接口的每个数据库驱动可以公开具体数据库的特性作为标准扩展功能. 注意利用 PDO 扩展自身并不能实现 ...
- ASP.NET#JavaScript中调用WebServer注意的问题
1)要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,就要取消注销以下行:[System.Web.Script.Services.ScriptService](2)调用格式:命名空间 ...
- Foundations of Machine Learning: Rademacher complexity and VC-Dimension(2)
Foundations of Machine Learning: Rademacher complexity and VC-Dimension(2) (一) 增长函数(Growth function) ...
- PyCharm 默认运行 unittest
若文件里面有某个函数名称或模块名称以test为前缀,Pycharm的话,就会自动认为是单元测试: 报错信息:test_file() missing 1 required positional argu ...