多字节转化为宽字节
来源:互联网 发布:mastercam9.13d编程 编辑:程序博客网 时间:2024/05/16 01:19
资料转载自:
http://hi.baidu.com/%C7%D8%B7%E7%CF%FE%D4%C2%C3%F7/blog/item/889a927fa3e2a7f52e73b393.html
http://blog.csdn.net/cynthiamoonbeen/article/details/5818564
http://blog.csdn.net/xieqq8/article/details/5189970
字符集间的转换想必大家都有过比较痛苦的经历。VC6中的字符串使用的是多字节字符集(MBCS),简单地说,就是汉字字符每个占两个字节,英文字符每个占一个字节;而到了VC2005及以上的版本,都统一为宽字符集了(Unicode),简单地说,就是每个字符--不管是汉字字符还是英文字符--都占两个字节。由于很多的开源项目、库等,用的都是老式的多字节字符集,比如说套接字编程等等,这样的话,要在新的编程环境(VC2005以上)中使用含多字节字符集的源文件、函数等,就需要注意到这个问题。以下是一些好用的解决该问题的方法(实验环境VC2008):
方法一 :
char * 转 CString
利用A2T或A2W函数。
例如:
char * p= "这是char*字符串" ;
USES_CONVERSION ;
CString strW = A2T (p);
//或 CString strW = A2W (p);
CString 转 char *
利用T2A或W2A函数。
例如:
//接上例
char * pA =T2A(strW);
//或者char * pA =T2W(strW);
方法二:
通过CStringA 和 CString 的构造函数,也能实现char* 和 CString的转换
char * 转 CString
例如:
char * p= "这是char*字符串" ;
CStringA strA(p);
CString strW(strA);
CString转char *
CString strW=_T("这是TCHAR字符串");
CStringA strA(strW);
char *p = strA.GetBuffer();
-----------------------以下是一些测试数据---------------------
//VC2008-默认使用UNICODE
int szA = sizeof(char);//szA值为1(字节)
int szW = sizeof(TCHAR);//szW值为2(字节)
//多字节字符集版(MBCS)--VC6使用
char *p= "这是char的字符串";
//--sizeof(p)是4,它得到的不是字符串长度,而是char *指针的长度(字节)
//在定义了UNICODE后是Unicode版
TCHAR *tp = _T("这是unicode字符串");
CStringA strA(p);
int nL = strA.GetLength (); //nL值为16:汉字字符每个两个字节,英文字符每个字符一个字节
CString strW(tp);
int nLW = strW.GetLength (); //nLW值为12:它表明在strW中有12个字符。注意此GetLength()与上面的区别
char *pA = new char[nL+1];
TCHAR *pT = new TCHAR[nLW+1];
szA = sizeof(pA); //szA值为4
szW = sizeof(pT); //szW值为4
::memcpy (pA,strA.GetBuffer (),nL);
pA[nL]='\0'; //缺少此句必然乱码
::wmemcpy (pT,strW.GetBuffer (),nLW);
pT[nLW]='\0'; //缺少此句必然乱码
- 多字节转化为宽字节
- 宽字节转化多字节 .
- 笔记:宽字节转化多字节
- 多字节字符串与宽字节字符串的相互转化
- 读取UNICODE文件转化为多字节
- 多字节与宽字节
- wcstombs_s 宽字节转多字节
- C++多字节与宽字节 转换
- Windows程序设计--宽字节和多字节
- 宽字节与多字节转换函数
- 字符串:多字节与宽字节转换
- 宽字节字符串多字节字符串转换
- 多字节字符与宽字节字符
- 宽字节与多字节转换
- 宽字节字符集和多字节字符集
- 宽字节 多字节 mbstowcs wcstombs
- 多字节字符与宽字节字符
- 如何将Unicode 字符转化为多字节字符
- Tomcat原理及应用(版1)
- JBPM委托的实现
- Tomcat配置
- Android startActivityForResult(intent, requestCode)的用法。
- 链接数据库时 出现这样的警告:Errors exist in required project
- 多字节转化为宽字节
- everyday english
- sqlserver2000与sqlserver2005和2008 jdbc连接的不同写法
- 32. A good medicine tastes bitter. 良药苦口
- 关于跨域的摘录-JavaScript跨域总结与解决办法
- C++视屏学习网址
- 网站颜色给用户的感觉
- 图片的旋转和透明化
- 第一篇文章