写在前面的话:在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字符串的更多相关文章

  1. Python Cookbook(第3版)中文版:15.15 C字符串转换为Python字符串

    15.15 C字符串转换为Python字符串¶ 问题¶ 怎样将C中的字符串转换为Python字节或一个字符串对象? 解决方案¶ C字符串使用一对 char * 和 int 来表示, 你需要决定字符串到 ...

  2. Python:Base1(数据类型,print语句,变量,定义字符串,raw字符串与多行字符串,Unicode字符串,整数和浮点数运算,布尔类型运算)

    1.Python中数据类型: 计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值.但是,计算机能处理的远不止数值,还可以处理文本.图形.音频.视频.网页等各种各样的数据 ...

  3. javascript - 将字符串转换为模板字符串

    参考: https://www.itranslater.com/qa/details/2325714161562551296 是否可以将模板字符串创建为常用字符串 let a="b:${b} ...

  4. C# 将普通字符串转换为二进制字符串

    1.因为项目的需要,在向数据库中添加人的信息时,必须要求是英文或数字,所以想了个办法,将我们人能看懂的字符串编译成二进制字符串转入就行了. 具体的逻辑实现代码如下:

  5. 中文字符串转换为十六进制Unicode编码字符串

    package my.unicode; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Uni ...

  6. 字符串与Unicode码的相互转换

    //1,字符串转换为unicode码 var s = '吴'; //2,unicode码转字符串 '\u5434'.toString(16) //吴 或者 String.fromCharCode(21 ...

  7. Python中 字符串 转换为 字典

    需求:把以下字符串转换为字典 #字符串 testStr = '{ "pName": "Ceshi", "gender": 1, " ...

  8. SSIS 无法在 unicode 和非 unicode 字符串数据类型之间转换

    最近在学SSIS,遇到一个问题,把平面文件源的数据导入到EXCEL中. 平面文件源的对象是CSV,读进来的PhoneNumber是 DT_STR 然后倒入Excel 对应列建立的是longtext 一 ...

  9. UNICODE字符串与多字节字符串的转换

    相互转换的两个函数的声明: 1. 多字节字符串与宽字符串的转换 int MultiByteToWideChar( UINT CodePage, // code page,一般设为 CP_ACP DWO ...

随机推荐

  1. IDC 知识库

    http://www.51idc.com/help/supportHelp.html Host key verification failed解决IIS错误信息--另一个程序正在使用此文件,进程无法访 ...

  2. GNU与Linux

    GNU是自由软件之父 Richard Stallman在1984年组织开发的一个完全基于自由软件的软件体系,与此相应的有一分通用公共许可证(General Public License,简称GPL). ...

  3. vue源码cached高阶函数解析

    1.源代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <tit ...

  4. 【Oracle】RAC 10.2.0.1升级10.2.0.5

    环境: OS:OEL5.6 RAC:10.2.0.1.0 相关环境变量: CRS_HOME /u01/app/oracle/product/10.2.0/db_1 ORACLE_HOME   /u01 ...

  5. sql server 根据经纬度计算两点间距离

    DECLARE @BJ GEOGRAPHY DECLARE @XT GEOGRAPHY SELECT @BJ= geography::Point('39.92889', '116.38833', 43 ...

  6. uploadify上传之前判断一个input输入框是否为空

    onUploadStart:function(file){ if ($("#ContractCode").val() == "") { alert(" ...

  7. Linq to Entity调用存储过程【转】

    http://www.cnblogs.com/chenxizhang/archive/2010/01/03/1638201.html

  8. 关于NHibernate中存在于Session中实例的3种状态的简单分析

    在使用NHibernate的时候.在Session中会有3种状态. 1. 瞬时状态 (Transient) 由 new 命令开辟内存空间的对象,也就是平时所熟悉的普通对象. 如: Student st ...

  9. 升级openssh基于openssl

    OpenSSH is the premier connectivity tool for remote login with the SSH protocol. It encrypts all tra ...

  10. result_charts

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...