目前知道有两种方式:可以提供宽字符与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库给字符串分配的内存,标准库提供的函数则要求自己事先非配一个缓存区用来存放,转换后的字符串.

最新文章

  1. strsep和strtok_r替代strtok
  2. Android 社交类APP 豆瓣同城Lite(安全,无广告)
  3. floyd算法
  4. [QDB] 幽灵分享:QDataSet+TQMSSQLConverter 实战技巧
  5. 项目中初试PHP单元测试
  6. ios 距离传感器和摇一摇
  7. 项目中如果管理前端文件CSS和JS
  8. Hdu-3487 Splay树,删除,添加,Lazy延迟标记操作
  9. Linux下反斜杠号&quot;\&quot;引发的思考
  10. -bash: lampp: command not found解决方案
  11. 【JDK源码系列】ConcurrentHashMap
  12. extjs 6.2 helloworld
  13. BNU Online Judge-34776-What does the fox say?
  14. C# backgroundworker使用方法
  15. 201521123091 《Java程序设计》第13周学习总结
  16. 一种数据与逻辑分离的Python单元测试工具
  17. Ntaub表单开发入门系列 (一)
  18. 大前端的自动化工厂(5)—— 基于Karma+Mocha+Chai的单元测试和接口测试
  19. 02-Centos7安装部署Mirrorgate
  20. PostgreSQL 自动输入密码

热门文章

  1. YUM更换源--yum找不到安装包(转)
  2. MEMS陀螺仪(gyroscope)的工作原理
  3. Qt :非window子窗体的透明度设置
  4. 4.1. 如何在Windows环境下开发Python
  5. poj 3185 The Water Bowls(反转)
  6. UVA - 11020 Efficient Solutions(Multiset)
  7. OC基础15:内存管理和自动引用计数
  8. Linux下命令行显示当前全路径方法
  9. Linux学习2——文件与目录
  10. HTML注释简介