version1:
LPWSTR转char*,问题:
函数(Unicode to Ansi):
//------------------------------------------------------------------------------------
// Unicode to Ansi
//
char* WstrToAstr(WCHAR *wstr)
{
unsigned long i = lstrlen (wstr);
char *astr;
astr = (char*) malloc (2*i+1);
if (astr == NULL)
return NULL;
else
memset (astr, '\0', i+1);
wcstombs(astr, wstr, i+1);
return astr;
}
version2:
int WideCharToMutByte(
UINT uCodePage,//标识了要与新转换的字符串联的代码页。
DWORD dwFlags,//允许我们指定额外的转换控制。这些标志会影响带变音符号的字符和系统不能转换的字符。一般赋值0
PCWSTR WideCharStr,//要转换的字符串的内存地址
int cchWideChar,//指明字符串的长度传入-1,有函数判断原字符串的长度,
pMultiBytStr,
......
)
WideCharMultiByte函数将宽字节字符转换为多字节字符串
int WideCharToMultiByte(
UINT uCodePage,
DWORD dwFlags,
PCWSTR pWideCharStr,
int cchWideChar,
PCSTR pDefaultChar,
PBOOL pfUsedDefaultChar
);
uCodePage表示了要与新转换的字符串关联的代码页。
dwFlags参数允许我们额外的转换控制。这些标志会影响带变音符号的字符和系统不能转换的字符。
pWideCharStr参数指向要转换的字符串的内存地址,cchWideChar参数指出该字符串的长度(字符数)。如果为cchWideChar参数传入-1,则有函数来判断源字符串的长度。
转换所得的多字节版本的字符串被写入pMultiByteStr参数所指的缓冲区。必须在cbMultiByte参数中指定此缓冲区的最大大小(字节数).调用WideCharToMultiByte函数时,如果将0作为cbMultiByte参数的传入,会导致该函数返回目标缓冲区需要的大小。