绝对正确绝对全的TCHAR和char的转换以及字符编码转换

来源:互联网 发布:今年欧文总决赛数据 编辑:程序博客网 时间:2024/06/08 08:17
TCHAR转为char 
没有定义UNICODE,所以它里面的字符串就是简单用" "就行了,创建工程的时候包含了UNICODE定义,就必须对TCHAR和char进行转换。
首先是把TCHAR转为char
[cpp] view plaincopyprint?
//将TCHAR转为char   
//*tchar是TCHAR类型指针,*_char是char类型指针   
TcharToChar (const TCHAR * tchar, char * _char)  
{  
    int iLength ;  

//获取字节长度   
iLength = WideCharToMultiByte(CP_ACP, 0, pm_pcData, -1, NULL, 0, NULL, NULL);  
//将tchar值赋给_char  
char * pm_pcData2A = new char [iLength] ;
WideCharToMultiByte(CP_ACP, 0, pm_pcData, -1, pm_pcData2A, iLength, NULL, NULL);  


        if ( NULL != pm_pcData2A )
{
delete pm_pcData2A;
pm_pcData2A = NULL;
}
}  


然后是把char转为TCHAR
[cpp] view plaincopyprint?
//同上   
CharToTchar (const char * _char, TCHAR * tchar)  
{  
    int iLength ;  
  
    iLength = MultiByteToWideChar (CP_ACP, 0, _char, strlen (_char) + 1, NULL, 0) ;  
    MultiByteToWideChar (CP_ACP, 0, _char, strlen (_char) + 1, tchar, iLength) ;  
}  


而且,字符编码的转换也可以用这两个函数的哦,只需改动函数第一个参数即可


其实还有就是.......
 CString lv_strTemp;
 char lv_chTemp[10];
 lv_strTemp.Format(_TEXT("%S"),lv_chTemp);

还有最简单的(一般不说的,嘿嘿)

#include <atlbase.h>//记得包含头文件


     TCHAR *lv_DataTemp;
USES_CONVERSION;
lv_DataTemp = A2T(lv_pRecordDataTemp->v_pcData);

        就是TCHAR* = A2T(char*);  和  char* = T2A(TCHAR*); 记得在调用之前一定要加上USES_CONVERSION;(初始化宏),经常有人调用编译错误就是没加这个


非常注意:!!!!!!!!!
    在类内部声明的变量最好按顺序使用_cscpy();之类的函数,不然会改变上一个内部的值,会发生奇怪的事情