CString string char* char 之間的字元轉換(多種方法),cstringchar
在寫程式的時候,我們經常遇到各種各樣的類型轉換,比如 char* CString string 之間的互相轉換。首先解釋下三者的含義。
CString 是一種很有用的資料類型。它們很大程度上簡化了MFC中的許多操作(適用於MFC架構),使得MFC在做字串操作的時候方便了很多。需要包含標頭檔#include <afx.h>
C++是字串,功能比較強大。要想使用標準C++中string類,必須要包含#include <string>// 注意是<string>,不是<string.h>,帶.h的是C語言中的標頭檔。Char * 專門用於指以'\0'為結束的字串.
以下方法來進行轉換:
// CharConvert.cpp : 定義控制台應用程式的進入點。//#include "stdafx.h"#include<iostream>#include<afx.h>#include<string>using namespace std;int _tmain(int argc, _TCHAR* argv[]){//此方法適用於“多位元組” 否則會出現'strcpy' : cannot convert parameter 2 from 'unsigned short *' to 'const char *'/*CString str("Hello zzu");cout<<"the CString is "<<str<<endl;char a[100];strcpy(a,str);cout<<"the convert to char * is "<<a<<"(char *)"<<endl;*///CString 轉換成string// CString c_str1("Hello Zhengzhou University");//string str;//str=c_str1.GetBuffer(0);//c_str1.ReleaseBuffer(); //否則就沒有釋放緩衝區所佔的空間//cout<<str<<endl;//cout<<"\n"<<c_str1<<endl;//string 轉換成CString/*string str1("Hello College of Information Engineering");CString c_str2;c_str2=str1.c_str(); //c_str():產生一個const char*指標,指向以Null 字元終止的數組。cout<<"the CString is "<<c_str2<<endl;cout<<"the string is "<<str1<<endl;*///string轉換成const char*//方法一://string str2("Hello College of Information Engineering");//const char * str3; //常數指標//str3=str2.c_str();//cout<<"string is "<<str2<<endl;//cout<<"const char is "<<str3<<endl;//方法二: // /* string str("Hello College of Information Engineering");//const char * c_str;//c_str=str.data();//cout<<"string is "<<str<<endl;//cout<<"const char is"<<c_str<<endl;*///string 直接轉換成char*///*string s1 = "abcdefg";//char *data;//int len = s1.length();//data = (char *)malloc((len)*sizeof(char));//s1.copy(data,len,0);//cout<<len<<endl;//cout<<data<<endl;*/ //string.copy()的用法 //size_t length; // char buffer[8]; // string str("Test string......"); // // length=str.copy(buffer,7,6); //從buffer6,往後數7個,相當於[ buffer[6], buffer[6+7] ) // buffer[length]='\0'; //加上'\0'使得buffer就到buffer[length]為止; // cout <<"buffer contains: " << buffer <<endl; //char * 轉換成string//char *到string /* char * c_str="zzu";string str(c_str);cout<<"the c_str "<<c_str<<endl;cout<<"the string is"<<str<<"and length is "<<str.length()<<endl;*///char a[]="asd";//cout<<strlen(a)<<endl; //為什麼顯示的是3,不是有一個\0嗎//char * 到CString ////char * c_str1="zzu";////CString str; //可以直接轉換,因為CString存在重載(在多位元組字元集下適用)////str.Format("%s",c_str1);////cout<<"the c_str1 is"<<c_str1<<endl;////cout<<"the CString is"<<str<<endl;//方法1:使用API:WideCharToMultiByte進行轉換(使用過,有效) //CString str= CString("This is an example!"); //int n = str.GetLength(); //按字元計算,str的長度 //int len = WideCharToMultiByte(CP_ACP,0,str,n,NULL,0,NULL,NULL);//按Byte計算str長度 //char *pChStr = new char[len+1];//按位元組為單位 //WideCharToMultiByte(CP_ACP,0,str,n,pChStr,len,NULL,NULL);//寬位元組轉換為多位元組編碼 // pChStr[len] = '\0';//不要忽略末尾結束標誌 //用完了記得delete []pChStr,防止記憶體泄露return 0;}
同時需要注意的是,我們在平成寫程式時,最好搞清我們的編譯環境中的編碼方式,不同的編碼方式可以會導致一些字元轉換失敗,當我們編程開始,就要想好在哪個編碼方式下進行,以免最後出現換編碼方式了,代碼卻出現很多錯誤(很讓人頭疼),比如sqlite資料庫中的中文字元亂碼問題就是由於編碼方式和資料庫中預設的編碼方式不一致。這點在我們寫程式時一定謹記。