#include <stdio.h>
#include <stdlib.h>
#include <wchar.h>
//计算需要的char的长度
int wstr2strLen(const wchar_t *pwstr)
{
int count = 0;
int i;
int len = wcslen(pwstr);
for(i = 0; i < len; ++i)
{
unsigned short tmp = *(pwstr + i);
printf("tmp num is %0x/n", tmp);
if (tmp < 0x007F)
{
count += 1;
} else if (tmp > 0x0800)
{
count += 3;
}
else
{
count += 2;
}
}
return count;
}
//单个字符的转化
/* UCS-2编码(16进制) UTF-8 字节流(二进制)
0000 - 007F 0xxxxxxx
0080 - 07FF 110xxxxx 10xxxxxx
0800 - FFFF 1110xxxx 10xxxxxx 10xxxxxx
*/
int W2C(const wchar_t *pw, char *pc)
{
unsigned short tmp = *pw;
if (tmp < 0x007F)
{
*pc = *pw;
return 1;
}
else if (tmp > 0x0800)
{
*pc = 0xe0 | (((*pw >> 8) & 0xf0) >> 4);
*(pc + 1) = 0x80 | (((*pw >> 8) & 0x0f) << 2) | ((*pw & 0xc0) >> 6);
*(pc + 2) = 0x80 | ((*pw & 0x3f));
return 3;
}
else
{
*pc = 0xc0 | ((*pw >> 8) & 0x03) << 2 | (*pw & 0xc0) >> 6;
*(pc + 1) = 0x80 | (*pw & 0x3f);
return 2;
}
return 0;
}
//字符串的转化
char *wstr2cstr(const wchar_t *pwstr, char *pcstr, size_t len)
{
char *ptemp = pcstr;
if (pwstr != NULL && pcstr != NULL)
{
size_t wstr_len = wcslen(pwstr);
printf("wstr_len is %d/n", wstr_len);
len = (len > wstr_len) ? wstr_len : len;
while (len-- > 0 )
{
int i = W2C(pwstr, pcstr);
pwstr++;
pcstr += i;
}
*pcstr = '/0';
return ptemp;
}
return 0;
}