
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; 展开
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; 展开
4个回答
展开全部
微软对中文编码很扯淡,给你写段能用的
#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;
}
来自:求助得到的回答
展开全部
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));
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));
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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");
}
}
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");
}
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
WideCharToMultiByte吧
追问
不会用这个函数!求指导
追答
WideCharToMultiByte(CP_ACP, 0, lujing, -1, mnv, sizeof(mnv), NULL, NULL);这样应该可以了。wchar_t lujing[]="1223333中文"; 这里应该是这样吧
看看参考资料吧,刚看到的
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询