| 论坛管理员 | 
				 关于数字或字母转unicode的问题 
 
			
			关于数字或字母转unicode的问题 
试试这个 
C/C++ code 
#include<comdef.h>char*str1="safdjkjlasfd";  
_bstr str2=str1;  
WCHAR*str3=str2; 
C/C++ code #include   <comdef.h> 
 char*str1   ="hello中国人!";
 WCHAR   *str2   =   _bstr_t(str1);
 [cpp] view plaincopyprint?
 
 // 宽字符转换单字符string WideCharToMultiChar(wstring str){string return_value;//获取缓冲区的大小,并申请空间,缓冲区大小是按字节计算的   
 int len=WideCharToMultiByte(CP_ACP,0,str.c_str(),str.size(),NULL,0,NULL,NULL);  </SPAN>char *buffer=new char[len+1];  </SPAN>WideCharToMultiByte(CP_ACP,0,str.c_str(),str.size(),buffer,len,NULL,NULL);buffer[len]='/0';  </SPAN>//删除缓冲区并返回值   </SPAN>return_value.append(buffer);delete []buffer;  </SPAN>return return_value;  </SPAN>}// 单字符转换宽字符   </SPAN>wstring MultCHarToWideChar(string str){  //获取缓冲区的大小,并申请空间,缓冲区大小是按字符计算的   </SPAN>  int len=MultiByteToWideChar(CP_ACP,0,str.c_str(),str.size(),NULL,0);  </SPAN>  TCHAR *buffer=new TCHAR[len+1];  </SPAN>  //多字节编码转换成宽字节编码   </SPAN>  MultiByteToWideChar(CP_ACP,0,str.c_str(),str.size(),buffer,len);  buffer[len]='/0';//添加字符串结尾   </SPAN>  //删除缓冲区并返回值   </SPAN>  wstring return_value;  return_value.append(buffer);  delete []buffer;  </SPAN>  return return_value;  </SPAN>}  
 // 宽字符转换单字符string WideCharToMultiChar(wstring str){string return_value;//获取缓冲区的大小,并申请空间,缓冲区大小是按字节计算的int len=WideCharToMultiByte(CP_ACP,0,str.c_str(),str.size(),NULL,0,NULL,NULL);char *buffer=new char[len+1];WideCharToMultiByte(CP_ACP,0,str.c_str(),str.size(),buffer,len,NULL,NULL);buffer[len]='/0';//删除缓冲区并返回值return_value.append(buffer);delete []buffer;return return_value;}// 单字符转换宽字符wstring MultCHarToWideChar(string str){  //获取缓冲区的大小,并申请空间,缓冲区大小是按字符计算的  int len=MultiByteToWideChar(CP_ACP,0,str.c_str(),str.size(),NULL,0);  TCHAR *buffer=new TCHAR[len+1];  //多字节编码转换成宽字节编码  MultiByteToWideChar(CP_ACP,0,str.c_str(),str.size(),buffer,len);  buffer[len]='/0';//添加字符串结尾  //删除缓冲区并返回值  wstring return_value;  return_value.append(buffer);  delete []buffer;  return return_value;} </SPAN>
手机使用ucs2格式,ucs2 是utf16 的big endian格式,平常在windows下称呼的unicode是utf16的little endian格式。 
 一个字符'1',其unicode值是0x0031, 0x0031仍然是0x31,在具体实现上,ucs2表示成两个字节0x00, 0x31,而pc机上表现库0x31, 0x00。本质上是一样的。
 
 
[cpp] view plaincopyprint?
 
 Windows环境下,用C实现UCS2编码和解码的算法如下://   UCS2编码    
 //   pSrc:   源字符串指针    </SPAN>//   pDst:   目标编码串指针    </SPAN>//   nSrcLength:   源字符串长度    </SPAN>//   返回:   目标编码串长度    </SPAN>int   gsmEncodeUcs2(const   char*   pSrc,   unsigned   char*   pDst,   int   nSrcLength)   </SPAN>{        int   nDstLength;                 //   UNICODE宽字符数目    </SPAN>        WCHAR   wchar[128];             //   UNICODE串缓冲区    </SPAN>        //   字符串--> UNICODE串    </SPAN>        nDstLength   =   ::MultiByteToWideChar(CP_ACP,   0,   pSrc,   nSrcLength,   wchar,   128);        //   高低字节对调,输出    </SPAN>        for(int   i=0;   i <nDstLength;   i++)   </SPAN>        {                //   先输出高位字节    </SPAN>                *pDst++   =   wchar[i]   > >   8;                //   后输出低位字节    </SPAN>                *pDst++   =   wchar[i]   &   0xff;        }        //   返回目标编码串长度    </SPAN>        return   nDstLength   *   2;   </SPAN>}//   UCS2解码    </SPAN>//   pSrc:   源编码串指针    </SPAN>//   pDst:   目标字符串指针    </SPAN>//   nSrcLength:   源编码串长度    </SPAN>//   返回:   目标字符串长度    </SPAN>int   gsmDecodeUcs2(const   unsigned   char*   pSrc,   char*   pDst,   int   nSrcLength)   </SPAN>{        int   nDstLength;                 //   UNICODE宽字符数目    </SPAN>        WCHAR   wchar[128];             //   UNICODE串缓冲区    </SPAN>        //   高低字节对调,拼成UNICODE    </SPAN>        for(int   i=0;   i <nSrcLength/2;   i++)   </SPAN>        {                //   先高位字节    </SPAN>                wchar[i]   =   *pSrc++   < <   8;                //   后低位字节    </SPAN>                wchar[i]   |=   *pSrc++;        }        //   UNICODE串--> 字符串    </SPAN>        nDstLength   =   ::WideCharToMultiByte(CP_ACP,   0,   wchar,   nSrcLength/2,   pDst,   160,   NULL,   NULL);        //   输出字符串加个结束符            </SPAN>        pDst[nDstLength]   =   '/0 ';           </SPAN>        //   返回目标字符串长度    </SPAN>        return   nDstLength;   </SPAN>}   
 
				__________________  让世界倾听我们的笛声 |