写在前面的话:在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. js setInterval() 用法示例

      Created by Marydon on 1.定义 语法:setInterval(param1,param2) param1 要调用的函数或要执行的代码串. param2 周期性调用param1 ...

  2. POJ2226

    题意:给定一个矩阵,当中有一些地方有水,如今有一些长度随意,宽为1的木板,要求在全部板不跨越不论什么坑的前提下,用一些木板盖住这些有水的地方,问至少须要几块板子? 思路: watermark/2/te ...

  3. maven中央仓库

    https://search.maven.org (查看版本和文件列表:http://repo1.maven.org/maven2/) http://mvnrepository.com/ https: ...

  4. java 新创建的类要重写的方法

    重写toString方法,可以控制println打印的结构. 如果需要往hashSet或者HashMap中存,需要重写hashCode和equals方法,因为hashSet执行添加,以对象为参数删除, ...

  5. Scala之Object (apply) dycopy

    一.前言 前面学习了Scala的Methods,接着学习Scala中的Object 二.Object Object在Scala有两种含义,在Java中,其代表一个类的实例,而在Scala中,其还是一个 ...

  6. iOS支付宝支付集成

    概述 iOS支付宝支付集成 详细 代码下载:http://www.demodashi.com/demo/10729.html 支付宝和微信都是业界的老大哥,相信大家都有所觉得文档.SDK都是各种坑吧( ...

  7. docker创建自己的镜像并配置nginx

    前言 最近在研究docker,记录一下如何创建一个属于自己的镜像 本次使用linux版本为centos7.4(centos6也可以使用docker,只不过有部分功能只有7才有) 本次创建的镜像为cen ...

  8. HDUOJ---Hamming Distance(4712)

    Hamming Distance Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others) ...

  9. ASP.NET 安全系列 Membership三步曲之入门篇 - Jesse Liu

    Membership 三步曲 ASP.NET 安全系列 Membership三步曲之入门篇 ASP.NET 安全系列 Membership三步曲之进阶篇 ASP.NET 安全系列 Membership ...

  10. sleep()和usleep()的使用和区别

    在iOS中  如果 在主线程中用这2个 都会 对 主线程 造成 阻塞 具体区别 如下   Linux 中的 代码 为例 函数名: sleep头文件: #include <windows.h> ...