在C#中,汉字转成十六进制的Utf8字符很方便(主要用到getencoding方法和getbytes方法);
例如:汉字“中”,转成16进制的UTF8为:“=E4=B8=AD”
他的实现原理就是把汉字转化UTF-8编码,再把UTF-8转化为byte数组,数组内容:byte[0]=228;byte[1]=184;byte[2]=173;然后依次转化为十六进制并加=号。
我想问VC要怎样实现上述过程,本人初学者,做手机通讯录时需要把中文姓名转为十六进制的UTF-8字符,上网早了很多资料,转化的结果都不一样
例如:汉字“中”,转成16进制的UTF8为:“=E4=B8=AD”
他的实现原理就是把汉字转化UTF-8编码,再把UTF-8转化为byte数组,数组内容:byte[0]=228;byte[1]=184;byte[2]=173;然后依次转化为十六进制并加=号。
我想问VC要怎样实现上述过程,本人初学者,做手机通讯录时需要把中文姓名转为十六进制的UTF-8字符,上网早了很多资料,转化的结果都不一样
{
char* pElementText=NULL;
int iTextLen=0;
// wide char to multi char
iTextLen = WideCharToMultiByte( CP_UTF8,
0,
strSrc,
-1,
NULL,
0,
NULL,
NULL );
if(iDesSize<iTextLen+2)
{
iDesSize=iTextLen+2;
return FALSE;
}
pElementText = new char[iTextLen + 1];
memset( ( void* )pElementText, 0, sizeof( char ) * ( iTextLen + 1 ) );
::WideCharToMultiByte( CP_UTF8,
0,
strSrc,
-1,
pElementText,
iTextLen,
NULL,
NULL );
memcpy(strDes,pElementText,iTextLen);
delete[] pElementText;
return TRUE;
}BOOL CTranslateUTF8::AsciiToUtf8(LPSTR strDes,int &iDesSize,LPCSTR strSrc)
{
WCHAR *buf=new WCHAR[iDesSize];
memset(buf,0,iDesSize*2);
int len=iDesSize;
if(AsciiToUnicode(buf,len,strSrc))
{
if(UnicodeToUtf8(strDes,iDesSize,buf))
{
delete [] buf;
return TRUE;
}
}
delete [] buf;
return FALSE;
}
BOOL CTranslateUTF8::AsciiToUnicode(LPWSTR strDes,int &iDesSize,LPCSTR strSrc)
{
//int len = 0;
//len = strlen(strSrc);
int unicodeLen = ::MultiByteToWideChar( CP_ACP,
0,
strSrc,
-1,
NULL,
0 );
if(iDesSize<unicodeLen+2)
{
iDesSize=unicodeLen+2;
return FALSE;
}
wchar_t * pUnicode=NULL;
pUnicode = new wchar_t[unicodeLen+1];
memset(pUnicode,0,(unicodeLen+1)*sizeof(wchar_t));
::MultiByteToWideChar( CP_ACP,
0,
strSrc,
-1,
(LPWSTR)pUnicode,
unicodeLen );
memcpy(strDes,pUnicode,unicodeLen*2);
delete [] pUnicode;
return TRUE; }
VC中BYTE就是byte