金笛工业手机论坛  

返回   金笛工业手机论坛 > 开发者乐园 > 短信开发资料

短信开发资料 短信开发技巧,代码分析

回复
 
LinkBack 主题工具 显示模式
旧 2012-08-24   #1 (permalink)
论坛管理员
 
admin 的头像
 
注册日期: 2009-06-30
帖子: 861
admin 的声望功能已被禁用
默认 关于数字或字母转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?
  1. // 宽字符转换单字符
  2. string WideCharToMultiChar(wstring str)
  3. {
  4. string return_value;
  5. //获取缓冲区的大小,并申请空间,缓冲区大小是按字节计算的
  1. int len=WideCharToMultiByte(CP_ACP,0,str.c_str(),str.size(),NULL,0,NULL,NULL); </SPAN>
  2. char *buffer=new char[len+1]; </SPAN>
  3. WideCharToMultiByte(CP_ACP,0,str.c_str(),str.size(),buffer,len,NULL,NULL);
  4. buffer[len]='/0'; </SPAN>
  5. //删除缓冲区并返回值 </SPAN>
  6. return_value.append(buffer);
  7. delete []buffer; </SPAN>
  8. return return_value; </SPAN>
  9. }
  10. // 单字符转换宽字符 </SPAN>
  11. wstring MultCHarToWideChar(string str)
  12. {
  13. //获取缓冲区的大小,并申请空间,缓冲区大小是按字符计算的 </SPAN>
  14. int len=MultiByteToWideChar(CP_ACP,0,str.c_str(),str.size(),NULL,0); </SPAN>
  15. TCHAR *buffer=new TCHAR[len+1]; </SPAN>
  16. //多字节编码转换成宽字节编码 </SPAN>
  17. MultiByteToWideChar(CP_ACP,0,str.c_str(),str.size(),buffer,len);
  18. buffer[len]='/0';//添加字符串结尾 </SPAN>
  19. //删除缓冲区并返回值 </SPAN>
  20. wstring return_value;
  21. return_value.append(buffer);
  22. delete []buffer; </SPAN>
  23. return return_value; </SPAN>
  24. }
// 宽字符转换单字符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?
  1. Windows环境下,用C实现UCS2编码和解码的算法如下:
  2. // UCS2编码
  1. // pSrc: 源字符串指针 </SPAN>
  2. // pDst: 目标编码串指针 </SPAN>
  3. // nSrcLength: 源字符串长度 </SPAN>
  4. // 返回: 目标编码串长度 </SPAN>
  5. int gsmEncodeUcs2(const char* pSrc, unsigned char* pDst, int nSrcLength) </SPAN>
  6. {
  7. int nDstLength; // UNICODE宽字符数目 </SPAN>
  8. WCHAR wchar[128]; // UNICODE串缓冲区 </SPAN>
  9. // 字符串--> UNICODE串 </SPAN>
  10. nDstLength = ::MultiByteToWideChar(CP_ACP, 0, pSrc, nSrcLength, wchar, 128);
  11. // 高低字节对调,输出 </SPAN>
  12. for(int i=0; i <nDstLength; i++) </SPAN>
  13. {
  14. // 先输出高位字节 </SPAN>
  15. *pDst++ = wchar[i] > > 8;
  16. // 后输出低位字节 </SPAN>
  17. *pDst++ = wchar[i] & 0xff;
  18. }
  19. // 返回目标编码串长度 </SPAN>
  20. return nDstLength * 2; </SPAN>
  21. }
  22. // UCS2解码 </SPAN>
  23. // pSrc: 源编码串指针 </SPAN>
  24. // pDst: 目标字符串指针 </SPAN>
  25. // nSrcLength: 源编码串长度 </SPAN>
  26. // 返回: 目标字符串长度 </SPAN>
  27. int gsmDecodeUcs2(const unsigned char* pSrc, char* pDst, int nSrcLength) </SPAN>
  28. {
  29. int nDstLength; // UNICODE宽字符数目 </SPAN>
  30. WCHAR wchar[128]; // UNICODE串缓冲区 </SPAN>
  31. // 高低字节对调,拼成UNICODE </SPAN>
  32. for(int i=0; i <nSrcLength/2; i++) </SPAN>
  33. {
  34. // 先高位字节 </SPAN>
  35. wchar[i] = *pSrc++ < < 8;
  36. // 后低位字节 </SPAN>
  37. wchar[i] |= *pSrc++;
  38. }
  39. // UNICODE串--> 字符串 </SPAN>
  40. nDstLength = ::WideCharToMultiByte(CP_ACP, 0, wchar, nSrcLength/2, pDst, 160, NULL, NULL);
  41. // 输出字符串加个结束符 </SPAN>
  42. pDst[nDstLength] = '/0 '; </SPAN>
  43. // 返回目标字符串长度 </SPAN>
  44. return nDstLength; </SPAN>
  45. }
__________________

让世界倾听我们的笛声
admin 当前离线   回复时引用此帖
回复

书签


当前查看此主题的会员: 1 (0 位会员和 1 位游客)
 

发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛启用 表情符号
论坛启用 [IMG] 代码
论坛禁用 HTML 代码
Trackbacks are 启用
Pingbacks are 启用
Refbacks are 启用



所有时间均为北京时间。现在的时间是 19:51


Powered by vBulletin® 版本 3.8.3
版权所有 ©2000 - 2024,Jelsoft Enterprises Ltd.