目前知道有两种方式:可以提供宽字符与ANSI字符之间的转换,

  第一种由COM库提供的函数

  char*  _com_util::ConvertBSTRToString(BSTR );

  BSTR _com_util::ConvertStringToBSTR(char*);

  Example

  // ConvertBSTRToString.cpp

  #include <comutil.h>

  #include <stdio.h>

  #pragma comment(lib, "comsupp.lib")

  int main()

  {

  BSTR bstrText = ::SysAllocString(L"Test");

  wprintf(L"BSTR text: %s\n", bstrText);

  char* lpszText2 = _com_util::ConvertBSTRToString(bstrText);

  printf("char * text: %s\n", lpszText2);

  SysFreeString(bstrText);

  delete[] lpszText2;

  }

  Output

  BSTR text: Test

  char * text: Test

  第二种标准库提供的函数

  将宽字符串wcstr转换为ANSI字符串mbstr

  size_t wcstombs( char *mbstr, const wchar_t *wcstr, size_t count );

  mbstr

  多字节字符的地址

  wcstr

  宽字符的地址

  count

  可以存储在多字节字符的最大字节数

  将ANSI字符串mbstr转化为宽字符串wcstr

  size_t mbstowcs( wchar_t *wcstr, const char *mbstr, size_t count );

  Parameters

  wcstr

  宽字符串的地址

  mbstr

  多字节字符串(ANSI)的地址

  count

  要转换的多字节的字符的个数

  Example

  /* MBSTOWCS.CPP illustrates the behavior of the mbstowcs function

  */

  #include <stdlib.h>

  #include <stdio.h>

  void main( void )

  {

  int i;

  char    *pmbnull  = NULL;

  char    *pmbhello = (char *)malloc( MB_CUR_MAX );

  wchar_t *pwchello = L"Hi";

  wchar_t *pwc      = (wchar_t *)malloc( sizeof( wchar_t ));

  printf( "Convert to multibyte string:\n" );

  i = wcstombs( pmbhello, pwchello, MB_CUR_MAX );

  printf( "\tCharacters converted: %u\n", i );

  printf( "\tHex value of first" );

  printf( " multibyte character: %#.4x\n\n", pmbhello );

  printf( "Convert back to wide-character string:\n" );

  i = mbstowcs( pwc, pmbhello, MB_CUR_MAX );

  printf( "\tCharacters converted: %u\n", i );

  printf( "\tHex value of first" );

  printf( " wide character: %#.4x\n\n", pwc );

  delete[] pmbhello;

  delete[] pwc      ;

  //该例子示例摘自msdn,我觉得这里有内存泄漏,所以我加入了

  //最后两行,应为这里涉及到动态内存分配,

  //ms-help://MS.MSDNQTR.2003FEB.2052/wcecrt/htm/_wcecrt_mbstowcs.htm

  }

  Output

  Convert to multibyte string:

  Characters converted: 1

  Hex value of first multibyte character: 0x0e1a

  Convert back to wide-character string:

  Characters converted: 1

  Hex value of first wide character: 0x0e1e

  用COM库的函数需要在转换完后,自己释放由COM库给字符串分配的内存,标准库提供的函数则要求自己事先非配一个缓存区用来存放,转换后的字符串.

C++多字节字符转换为宽字符的两种方法的更多相关文章

  1. Oracle中,将毫秒数转换为timestamp类型的两种方法

    在许多场景中,开发人员习惯用1970-01-01 00:00:00.000以来的毫秒数来表示具体的时间,这样可以将数据以NUMBER类型存储到数据库中,在某些时候方便比较,同样,有些时候我们需要 把这 ...

  2. 判断一个字符是否为数字的两种方法(C/C++)

    在平时,我们经常遇见判断字符是否为数字这种题目,虽然感觉还是很简单,不过我是个更喜欢用函数的人,因为我觉得这样更便捷,所以我更推荐第二种方式. 1.直接判断 #include <stdio.h& ...

  3. 【代码笔记】iOS-判断中英文混合的字符长度的两种方法

    一,代码. - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. ...

  4. C#统计给定的文本中字符出现的次数,使用循环和递归两种方法

    前几天看了一个.net程序员面试题目,题目是”统计给定的文本中字符出现的次数,使用循环和递归两种方法“. 下面是我对这个题目的解法: 1.使用循环: /// <summary> /// 使 ...

  5. Java判断一个字符是否是数字的几种方法的代码

    在工作期间,将写内容过程经常用到的一些内容段做个记录,下面内容是关于Java判断一个字符是否是数字的几种方法的内容,希望能对码农们有好处. public class Test{ public stat ...

  6. elf格式转换为hex格式文件的两种方法

    这周工作终于不太忙了,可以写点笔记总结一下了. 之前的文章如何在Keil-MDK开发环境生成Bin格式文件,介绍了如何在Keil开发环境使用fromelf软件,将生成的axf文件转换为bin文件,这次 ...

  7. spark-sql将Rdd转换为DataFrame进行操作的两种方法

    SparkConf sparkConf = new SparkConf() .setMaster("local").setAppName("ClzMap"); ...

  8. [转载]C#读写txt文件的两种方法介绍

    C#读写txt文件的两种方法介绍 by 大龙哥 1.添加命名空间 System.IO; System.Text; 2.文件的读取 (1).使用FileStream类进行文件的读取,并将它转换成char ...

  9. Loadrunner 接口测试的两种方法

    其实无论用那种测试方法,接口测试的原理是通过测试程序模拟客户端向服务器发送请求报文,服务器接收请求报文后对相应的报文做出处理然后再把应答报文发送给客户端,客户端接收应答报文这一个过程. 方法一.用Lo ...

随机推荐

  1. 握手(bestcode#42)

    Shaking hands 问题描述 今天是Gorwin的生日,所以她举办了一个派对并邀请她的朋友来参加.她将邀请n个朋友,为了方便,Gorwin把他们从1到n标号.他们之中有一些人已经相互认识,有一 ...

  2. FMDB将对象放进数据库[二](使用runtime)

    @import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...

  3. 一个简化的printf函数

    <C和指针>第7章第5道编程题: 实现一个简化的printf函数,它能够处理%d.%f.%s 和 %c 格式码,根据ANSI标准的原则,其他格式码的行为是未定义的.你可以假定已经存在函数 ...

  4. linux shell if语句

    #!/bin/bash read -p "please input Y/N" keyWord if [ "$keyWord" == "Y" ...

  5. 混合使用Azure LB和ILB访问相同web服务(1)

    在经典的使用场景中,我们一般使用AzureLoadBalancer来面向公网提供负载均衡服务,而使用Azure Internal Load Balancer提供内部那些不愿意将服务暴露给公网的服务,比 ...

  6. gdal vc++ 配置说明

      1在VC中,打开菜Tool-Option,在Directories页面中的Library files中和Include files中分别添加GDAL的LIB文件目录和INCLUDE文件目录2打开菜 ...

  7. QT Creator 2.7.2 代码自动补全快捷键设置

    在QT Creater界面点[工具]再进[选项]找到[环境]下的[键盘]选项,搜索[CompleteThis]发现默认快捷键就是CTRL+SPACE,把它删除,然后添加自己想设置的快捷键(因为之前用e ...

  8. 加密芯片ALPU

    加密芯片ALPU 纽文微电子(上海)有限公司 n  公司简介 NEOWINE是一家半导体开发公司,2002年6月成立于韩国,于2011年在中国设法人;  研发总部位于韩国京畿道,并在上海.深圳设办事处 ...

  9. DM368启动串口打印分析

    DM36x initialization passed! TI UBL Version: 1.50 Booting Catalog Boot Loader                  //启动目 ...

  10. Linux查看物理CPU个数、核数、逻辑CPU个数 (转)

    # 总核数 = 物理CPU个数 X 每颗物理CPU的核数 # 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数 # 查看物理CPU个数 cat /proc/cpuinfo| ...