如何将char*转换为wchar

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将char*转换为wchar相关的知识,希望对你有一定的参考价值。

C++标准中,wchar_t是宽字符类型,每个wchar_t类型占2个字节,16位宽。汉字的表示就要用到wchar_t 。char,我们都知道,占一个字节,8位宽。其实知道了这个以后,要在wchar_t 和 char两种类型之间转换就不难实现了。

wchar_t 转换为char 的代码如下:

有如下的wchar_t和char变量

wchar_t w_cn = '中';
char c_cn[2] = '0' ;

char *C2W(wchar_t w_cn , char c_cn[2])



//following code convert wchar to char
c_cn[0] = w_cn >> 8 ;
c_cn[1] = w_cn ;
c_cn[2] = '\0';

return c_cn ;



其中需要注意的是一个16位的wchar_t需要用两个8位的char来存储之。我们可以发现另外一个问题,wchar_t的高位字节应该存储在char数组的低位字节。(这里没有仔细研究了,觉得怪怪的)。

这是完成了wchar_t到char的转化
参考技术A char 转 WCHAR
WCHAR * charToWchar(char *s)
int w_nlen=MultiByteToWideChar(CP_ACP,0,s,-1,NULL,0);
WCHAR *ret;
ret=(WCHAR*) malloc(sizeof(WCHAR)*w_nlen);
memset(ret,0,sizeof(ret));
MultiByteToWideChar(CP_ACP,0,s,-1,ret,w_nlen);
return ret;

返回结果用完要free掉.

WCHAR 转char

char* WCharToChar(WCHAR *s)
int w_nlen=WideCharToMultiByte(CP_ACP,0,s,-1,NULL,0,NULL,false);
char *ret=new char[w_nlen];
memset(ret,0,w_nlen);
WideCharToMultiByte(CP_ACP,0,s,-1,ret,w_nlen,NULL,false);
return ret;

返回结果用完要free掉.本回答被提问者采纳

cc++ char*和wchar*互相转换

1. 问题描述
  编写程序时通常会面对一些不同的编码格式,如Unicode和multibytes。在有关字符串的处理时尤其重要,系统编程时通常会遇到很多这样的问题,例如把wchar*的字符串转换为char*的字符串,有时还需要把char*类型的字符串转换为wchar*类型。下面提供几种解决方案。

2. 解决方案
2.1 wchar* 转到 char*
  方法一,使用_bstr_t转换。
  

#include <comdef.h> // you will need this
const WCHAR* wc = L"Hello World" ;
_bstr_t b(wc);
const char* c = b;
printf("Output: %s\n", c);

  方法二,使用conversion macros。
  包含在头文件#include <atlconv.h>中,使用需谨慎!因为转换字符串分配的空间在栈上,直到函数返回才释放。如归使用很多次,例如在递归函数里使用,容易造成内存溢出。

USES_CONVERSION;
WCHAR* wc = L"Hello World" ;
char* c = W2A(wc);

  方法三,使用sprintf,比较简洁。
  

char output[256];
WCHAR* wc = L"Hellow World" ;
sprintf(output, "%ws", wc );

2.2 char*转 wchar*
  方法一:使用mbstowcs函数。
  

const wchar_t *GetWC(const char *c)

const size_t cSize = strlen(c)+1;
wchar_t* wc = new wchar_t[cSize];
mbstowcs (wc, c, cSize);

return wc;


  方法二:使用USES_CONVERSION。
  用法及注意事项同上。
  

USES_CONVERSION;
char* c = L"Hello World" ;
Wchar* wc = A2W(c);

  方法三:使用swprintf函数,推荐使用。
  

wchar_t ws[100];
swprintf(ws, 100, L"%hs", "ansi string");
---------------------
版权声明:本文为CSDN博主「jeanphorn」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Jeanphorn/article/details/45745739

以上是关于如何将char*转换为wchar的主要内容,如果未能解决你的问题,请参考以下文章

char* 和 wchar_t* 如何互相转换

如何定义宏以将连接的char字符串转换为C中的wchar_t字符串

如何把wchar_t类型的汉子转换为char*

C++中怎么将WCHAR字符串转换成CHAR字符串?

如何将包含 UTF-8 十六进制值的字符串转换为 C 中的 wchar?

无法将 char* 转换为 WCHAR* [qt/c++]