win32控制台里 wchar_t字符串转成char数组!2
发布网友
发布时间:2023-10-09 10:09
我来回答
共4个回答
热心网友
时间:2024-12-13 09:08
微软对中文编码很扯淡,给你写段能用的
#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;
}
来自:求助得到的回答
热心网友
时间:2024-12-13 09:08
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));
热心网友
时间:2024-12-13 09:09
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");
}
}
热心网友
时间:2024-12-13 09:09
WideCharToMultiByte吧追问不会用这个函数!求指导
追答WideCharToMultiByte(CP_ACP, 0, lujing, -1, mnv, sizeof(mnv), NULL, NULL);这样应该可以了。wchar_t lujing[]="1223333中文"; 这里应该是这样吧
看看参考资料吧,刚看到的
参考资料:http://www.cnblogs.com/gakusei/articles/1585211.html