win32控制台里 wchar_t字符串转成char数组!

win32控制台里wchar_t字符串转成char数组,中文字符串乱码。求解决方法。wchar_tlujing="1223333中文";charmnv[500];ProW... win32控制台里 wchar_t字符串转成char数组,中文字符串乱码。求解决方法。
wchar_t lujing="1223333中文";
char mnv[500];
ProWstringToString(mnv,lujing);//这个是转换操作。ProWstringToString是别的软件转换函数。
string nex;//类
for(int i=0; i<wcslen(lujing); i++)
{
nex+=mnv[i];
}
cout<<nex;
展开
 我来答
百度网友3db35cc
2012-12-28 · TA获得超过124个赞
知道答主
回答量:95
采纳率:0%
帮助的人:64.3万
展开全部

微软对中文编码很扯淡,给你写段能用的

#include <stdio.h>

#include <stdlib.h>

#include <assert.h>

#include <Windows.h>

 

int main( void )

{

 

 wchar_t *src = L"adf中国ad";

 char * des = NULL;

 int len= WideCharToMultiByte(CP_ACP,0,src,wcslen(src),NULL,0,NULL,NULL);

 des=(char *)malloc(sizeof(char) * (len + 1));

 WideCharToMultiByte(CP_ACP,0,src,wcslen(src),des,len,NULL,NULL); 

 des[len] = '\0';

 printf("%s", des);

 getchar();

 free(des);

 return 0;

}

 

来自:求助得到的回答
wooden954
2015-12-14 · TA获得超过1万个赞
知道大有可为答主
回答量:6135
采纳率:93%
帮助的人:887万
展开全部
char型的数据,占用一个字节空间。
wchar_t的数据,占用多个字节空间。
从存储空间大小来看,char型的可以直接转换为wchar_t,但是如果两个字节的wchar_t要转换为单个字节的char型是需要舍弃一个字节的,这样会导致数据丢失,因此,是无法转换为char型数据的。wchar_t只可以转换为char型数组。
char转换为wchar_t,可以强制转换即可。如
char a;
wchar_t b;
b=(wchar_t)a;
而wchar_t转换为char型数组时可以使用内存复制memcpy函数。如:
char a[2];
wchar_t b;
memcpy(a,&b,sizeof(b));
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
_whales
2012-12-28 · TA获得超过2281个赞
知道大有可为答主
回答量:1814
采纳率:85%
帮助的人:543万
展开全部
VC++自己的示例size_t wcrtomb(
char *mbchar,
wchar_t wchar,
mbstate_t *mbstate
);
template <size_t size>
size_t wcrtomb(
char (&mbchar)[size],
wchar_t wchar,
mbstate_t *mbstate
); // C++ only// crt_wcrtomb.c
// compile with: /W3
// This program converts a wide character
// to its corresponding multibyte character.

#include <string.h>
#include <stdio.h>
#include <wchar.h>

int main( void )
{
size_t sizeOfCovertion = 0;
mbstate_t mbstate;
char mbStr = 0;
wchar_t* wcStr = L"Q";

// Reset to initial conversion state
memset(&mbstate, 0, sizeof(mbstate));

sizeOfCovertion = wcrtomb(&mbStr, *wcStr, &mbstate); // C4996
// Note: wcrtomb is deprecated; consider using wcrtomb_s instead
if (sizeOfCovertion > 0)
{
printf("The corresponding wide character \"");
wprintf(L"%s\"", wcStr);
printf(" was converted to the \"%c\" ", mbStr);
printf("multibyte character.\n");
}
else
{
printf("No corresponding multibyte character "
"was found.\n");
}
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
453743739
2012-12-28 · TA获得超过344个赞
知道小有建树答主
回答量:515
采纳率:0%
帮助的人:324万
展开全部
WideCharToMultiByte吧
追问
不会用这个函数!求指导
追答
WideCharToMultiByte(CP_ACP, 0, lujing, -1, mnv, sizeof(mnv), NULL, NULL);这样应该可以了。wchar_t  lujing[]="1223333中文"; 这里应该是这样吧
看看参考资料吧,刚看到的

参考资料: http://www.cnblogs.com/gakusei/articles/1585211.html

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式