16,471
社区成员
发帖
与我相关
我的任务
分享
int ChinaToUnicode(const char* pSrc, unsigned char* pDst, int nSrcLength)
{
int nDstLength; // UNICODE宽字符数目
WCHAR wchar[1024]; // UNICODE串缓冲区,这里写了固定值,可根据nSrcLength动态申请
unsigned char tmp[1024];// 临时缓冲区,这里写了固定值,可根据nSrcLength动态申请
memset(tmp,0,sizeof(tmp));
unsigned char* p=tmp;
// 字符串-->UNICODE串
nDstLength = MultiByteToWideChar(CP_ACP, 0, pSrc, nSrcLength, wchar, 1024);
// 高低字节对调,输出
for(int i=0; i<nDstLength; i++)
{
*p++ = wchar[i] >> 8; // 先输出高位字节
*p++ = wchar[i] & 0xff; // 后输出低位字节
}
//恢复指针
p=tmp;
const char tab[]="0123456789ABCDEF"; // 0x0-0xf的字符查找表
for (int i = 0; i < nDstLength*2; i++)
{
*pDst++ = tab[*p >> 4]; // 输出高4位
*pDst++ = tab[*p & 0x0f]; // 输出低4位
p++;
}
// 输出字符串加个结束符
*pDst = '\0';
return nDstLength*2*2;
}
CString ChinaToUnicode(CString chinaStr)
{
CString strRet;
int nChar = MultiByteToWideChar(CP_ACP, 0, chinaStr, -1, NULL, 0);
wchar_t* pBuf = new wchar_t[nChar];
nChar = MultiByteToWideChar(CP_ACP, 0, chinaStr, -1, pBuf, nChar);
for (int i = 0; i < nChar; i++)
{
CString str;
str.Format(_T("%X"), sBuf[i]);
strRet += str;
}
delete []pBuf;
return strRet;
}
CString ChinaToUnicode(CString chinaStr)
{
CString strRet;
int nChar = MultiByteToWideChar(CP_ACP, 0, s, -1, NULL, 0);
wchar_t* pBuf = new wchar_t[nChar];
nChar = MultiByteToWideChar(CP_ACP, 0, s, -1, pBuf, nChar);
for (int i = 0; i < nChar; i++)
{
CString str;
str.Format(_T("%X"), sBuf[i]);
strRet += str;
}
delete []pBuf;
return strRet;
}
CString ChinaToUnicode(LPCWSTR lpUnicode)
{
unsigned char *pCh = (unsigned char *) lpUnicode;
int nCount = wcslen( lpUnicode );
CString strResult;
for ( int i = 0; i < nCount * sizeof(WCHAR); i += 2 )
{
CString strTemp;
strTemp.Format( _T("%02X%02X"), pCh[i+1], pCh[i] );
strResult += strTemp;
}
return strResult;
}