Uncode与ANSI字符串转换
我们使用Windows函数MultiByteToWideChar将多字节字符串转换成宽字符字符串。函数如下:
int MultiByteToWideChar(
UINT CodePage,
DWORD dwFlags,
LPCSTR lpMultiByteStr,
int cbMultiByte,
LPWSTR lpWideCharStr,
int cchWideChar
);
nCodePage参数标识了与多字节字符串关联的一个代码页值。
dwFlag参数允许我们进行额外的控制。一般情况下不使用,传给dwFlag参数的值为0。
lpMultiByteStr参数指定要转换的字符串。
cbMultiByteStr参数指定字符串的长度(字节数)。如果传给cbMultiByteStr为-1,函数可自动判断源字符串的长度。
lpWideCharStr指向要写入的内存缓冲区
cchWideChar参数指定这个缓冲区的最大长度(字符数)。
正常的操作为:
.......
char szSrcBuffer[1024] = {0};
TCHAR* pszText = NULL;
.......
int nSize = MultiByteToWideChar(
CP_OEMCP,
0,
szSrcBuffer,
-1,
NULL, 0);
pszText = new TCHAR[nSize + 1];
memset(pszText, 0, (nSize + 1) * sizeof(TCHAR));
MultiByteToWideChar(
CP_OEMCP,
0,
szSrcBuffer,
-1,
pszText , nSize);
........
相应的,WideCharToMultiByte函数将宽字符字符串转换成多字节字符串。如下所示:
int WideCharToMultiByte(
UINT CodePage,
DWORD dwFlags,
LPCWSTR lpWideCharStr,
int cchWideChar,
LPSTR lpMultiByteStr,
int cbMultiByte,
LPCSTR lpDefaultChar,
LPBOOL lpUsedDefaultChar
);
正常的操作为:
.......
TCAHR szSrcBuffer[1024] = {0};
char* pszText = NULL;
.......
int nSize = WideCharToMultiByte(
CP_OEMCP,
0,
szSrcBuffer,
-1,
NULL, 0,
NULL, NULL);
pszText = new char[nSize + 1];
memset(pszText, 0, (nSize + 1) * sizeof(char));
WideCharToMultiByte(
CP_OEMCP,
0,
szSrcBuffer,
-1,
pszText , nSize,
NULL, NULL);
........