您的位置:首页 > 其它

中文和unicode字符的相互转换

2014-03-19 23:23 393 查看
中文转换成unicode:

wchar_t* ChangeCODE(const wchar_t *lpText)

{

int nLen = wcslen(lpText)+1;

wchar_t *wcsTmp = new wchar_t[nLen];

memset(wcsTmp,0,nLen);

wcscpy_s(wcsTmp,nLen,lpText);

wchar_t *newTmp = new wchar_t[nLen*4];

memset(newTmp, 0, nLen*4);

for(int i=0; i<nLen-1; ++i)

{

wchar_t buf[5] = L"";

swprintf_s(buf,5, L"%04X", wcsTmp[i]);

wcscat(newTmp, buf);

}

delete []wcsTmp;

return newTmp;

}

unicode转换成中文

bool HexCharToDigital(__in const char* HexStr, __in const unsigned int nLen, __out unsigned int& Digtal)

{

if(nLen != 4)

return false;

Digtal = 0;

char ch;

for(int i=nLen-1; i>=0; --i)

{

switch(HexStr[i])

{

case 'a':

case 'A':

ch = 10;

break;

case 'b':

case 'B':

ch = 11;

break;

case 'c':

case 'C':

ch = 12;

break;

case 'd':

case 'D':

ch = 13;

break;

case 'e':

case 'E':

ch = 14;

break;

case 'f':

case 'F':

ch = 15;

break;

default:

if(!isdigit(HexStr[i]))

return false;

ch = HexStr[i] - 0x30;

break;

}

Digtal += (ch << ((3-i)*4));

}

return true;

}

bool HexCharUniCodeToWString(__in const char* HexCharUniCode, __in const unsigned int nLen, __out std::wstring& wStr)

{

if(HexCharUniCode == NULL || nLen == 0 || (nLen%4) != 0)

{

return false;

}

wStr.clear();

unsigned int dig;

for(unsigned int i=0; i<nLen; i+=4)

{

if(!HexCharToDigital(&HexCharUniCode[i], 4, dig))

{

return false;

}

wStr += dig;

}

return true;

}

eg:

std::wstring wtrystr1, wtrystr2;

char chTmp_a[] = "5173004F004B";

HexCharUniCodeToWString(chTmp_a, strlen(chTmp_a), wtrystr1);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: