将宽字符转换为多字节字符串

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参数的传入,会导致该函数返回目标缓冲区需要的大小。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值