函数:
BOOL G_StringToASII(CString const &strSrc, BYTE * &pRefStoreBuff, int &nBuffLen, int &nLenResult)
{
nLenResult = WideCharToMultiByte(CP_ACP, WC_COMPOSITECHECK, strSrc, -1, NULL, 0, NULL, NULL);
if (nLenResult > nBuffLen)
{
delete[] pRefStoreBuff;
pRefStoreBuff = new BYTE[nLenResult];
if (!pRefStoreBuff)
return FALSE;
nBuffLen = nLenResult;
}
memset((void*)pRefStoreBuff, 0, sizeof(char) * nBuffLen);
WideCharToMultiByte(CP_ACP, WC_COMPOSITECHECK, strSrc, -1, (LPSTR)pRefStoreBuff, nLenResult, NULL, NULL);
return TRUE;
}
用法:
int nLenResult = 0;
int nOldBuffLen = 10;
BYTE* pBuffTemp = new BYTE[nOldBuffLen];
G_StringToASII(strSendData, pBuffTemp, nOldBuffLen, nLenResult);
//BYTE可以直接转成char
这里主要用到一个函数:WideCharToMultiByte
该函数可以映射一个unicode字符串到一个多字节字符串,执行转换的代码页、接收转换字符串、允许额外的控制等操作。
函数原型:
int WideCharToMultiByte(
UINT CodePage, //指定执行转换的代码页
DWORD dwFlags, //允许你进行额外的控制,它会影响使用了读音符号(比如重音)的字符
LPCWSTR lpWideCharStr, //指定要转换为宽字节字符串的缓冲区
int cchWideChar, //指定由参数lpWideCharStr指向的缓冲区的字符个数
LPSTR lpMultiByteStr, //指向接收被转换字符串的缓冲区
int cchMultiByte, //指定由参数lpMultiByteStr指向的缓冲区最大值
LPCSTR lpDefaultChar, //遇到一个不能转换的宽字符,函数便会使用pDefaultChar参数指向的字符
LPBOOL pfUsedDefaultChar //至少有一个字符不能转换为其多字节形式,函数就会把这个变量设为TRUE
);
参数具体的取值可以百度查询,这里就不一一介绍了。