Ansistring的型別轉換與使用
阿新 • • 發佈:2019-02-20
//Ansistring 轉 char void __fastcall TForm1::Button1Click(TObject *Sender) { AnsiString Test = "哈哈"; char *chr = Test.c_str(); } //char轉Ansistring #include <windef.h> void __fastcall TForm1::Button1Click(TObject *Sender) { AnsiString str = "Sample"; char chr[MAX_PATH]; strcpy( chr , str.c_str() ); } //Bool轉AnsiString void __fastcall TForm1::Button1Click(TObject *Sender) { AnsiString Test=BoolToStr(CheckBox1->Checked); } //Ansistring轉bool void __fastcall TForm1::Button1Click(TObject *Sender) { AnsiString Test="-1" CheckBox1->Checked= StrToBool( Test ); } //int轉ansistring void __fastcall TForm1::Button1Click(TObject *Sender) { int i = 123; AnsiString str = IntToStr( i ); } //AnsiString轉double void __fastcall TForm1::Button1Click(TObject *Sender) { AnsiString Test = "123"; long double d = StrToFloat( Test ); } //double轉AnsiString void __fastcall TForm1::Button1Click(TObject *Sender) { double d = 123.456; AnsiString str = FloatToStr( d ); } //double轉AnsiString並四捨五入 void __fastcall TForm1::Button1Click(TObject *Sender) { long double d = 123.456121212; AnsiString str = FloatToStrF( d , ffFixed ,5 , 4 ); //說明FloatTostrF裡5代表從第幾個數字的後一位開始四捨五入,4代表取4位小數。 //執行後得到str是123.4600。:roll: } //double轉AnsiString使用類似vb的format函式 void __fastcall TForm1::Button1Click(TObject *Sender) { double d = 123.456; AnsiString str = FormatFloat( "000000.00" , d ); } //得到 000123.45,當然你可以使用"# . , ; E+ E- xx"等符號,你自己試試 :wink: //AnsiString轉Tclor型 void __fastcall TForm1::Button1Click(TObject *Sender) { AnsiString Test = "0x00FF8080"; TColor Col = StringToColor( Test ); } //Tcolor轉AnsiString void __fastcall TForm1::Button1Click(TObject *Sender) { TColor Col = 0x00FF8080; AnsiString str = ColorToString( Col ); } //消除AnsiString 中的一部分字串 程式碼: void __fastcall TForm1::Button1Click(TObject *Sender) { AnsiString Test = "ABCDEF"; int First = 3; // 消除制定開頭 int Length = 2;// 消除制定長度 AnsiString Dstr = Test.Delete( First , Length ); }//得到ABEF //在AnsiString 中插入字串 void __fastcall TForm1::Button1Click(TObject *Sender) { AnsiString Test = "ABCDEF"; AnsiString Ins = "12345"; // 插入串 int Pos = 3; // 在哪插 AnsiString Istr = Test.Insert( Ins , Pos ); //得到AB12345CDEF } //取得ansi某一位字元 void __fastcall TForm1::Button1Click(TObject *Sender) { AnsiString Test = "ABCDEF"; AnsiString Npos = Test[3];//得到C } //取得AnsiString裡最後一個字元 void __fastcall TForm1::Button1Click(TObject *Sender) { AnsiString Test = "ABCDEF"; char *Lstr = Test.AnsiLastChar();//得到F } //取出AnsiString字元,這個類似vb的mid函式! void __fastcall TForm1::Button1Click(TObject *Sender) { AnsiString Test = "ABCDEF"; int First = 3; // 3開始取 int Length = 2;// 取2位 AnsiString Getstr = Test.SubString( First , Length ); //得到CD } //AnsiString的字母比較 void __fastcall TForm1::Button1Click(TObject *Sender) { AnsiString Test = "ABCDEF"; AnsiString Sample = "abcdef"; int Result = Test.AnsiCompare( Sample ); //返回1,不同!分大小寫。 } void __fastcall TForm1::Button1Click(TObject *Sender) { AnsiString Test = "ABCDEF"; AnsiString Sample = "abcdef"; int Result = Test.AnsiCompareIC( Sample ); //返回0,相同!沒有分大小寫,哈哈 }
unsigned char *c1=(str).c_str();
說了多少遍了,不要這樣用。
先不說AnsiString和char*的問題,我覺得初學者首先要記住的就是對記憶體的管理,大多數情況下誰分配(new)的就由誰來釋放(delete)。
AnsiString是一個類(class),它在內部實現了對記憶體的管理,使用者不必去理會。
char*是一個指標(pointer),指向一塊記憶體,所以使用者必須負責它的分配和釋放。
AnsiString.c_str() 返回的是類實體所管理的記憶體,第1這個地址可能會改變,第2對塊記憶體的操作可能會破壞類的結構。
不使用中間變數只是一個習慣問題,並不是一定不能這麼做,至少在語法是沒有問題的。
就像把變數都命名為a,b,c...一樣,雖然可以,但不建議這樣做,也幾乎沒有程式這樣做,除了一些不友好的小例子。