c c 基礎篇之資料型別轉換

2021-08-20 12:16:19 字數 3649 閱讀 3350

c/c++常見的資料型別轉換

1.      常見的單類基本型別轉換

(1)強制型別轉換

如: int a=(int)(9.87)  結果a=9

char c=(char)(97)  結果為c=』a』

特別注意的是,在c++11中,增加了auto關鍵字,轉換型別相對智慧型化

auto c=(int)(9.87)   結果c=9

(2)string與char * ,char arr

string----const char *

c_str()生成乙個constchar*指標,指向以空字元終止的陣列。

例1:const char *c;  string s=」1234」; c=s.c_str();cout例2:string str=」lol」; char * ptr=new char[str.length()+1]; strcat(ptr,str)

string---char s

可以利用strcpy函式(需先轉換成constchar *)或者利用迴圈對字元陣列逐一賦值

例:string s(『test』);char str[10];

strcpy(str,s.c_str())

for(inti=0;ichar s與char *------string

可以直接賦值 char *ptr; char arr;  string s1=ptr;  string s2=arr;

(3)char *與int

標頭檔案:#include

atoi() 函式用來將字串轉換成整數(int),其原型為:intatoi (const char * str);

例:char *numchars="1234"; int num=atoi(numchars);  結果為1234

itoa()函式用於整數到字串的轉換,其原型為:char*itoa(int value, char *string, int radix);

例:int num=1234;  int radix=8;  char res[20];  itoa(num,res,radix);

printf("%d(10)=%s(%d)\n",num,res,radix);//輸出1234(10)=2322(8) 這裡radix指的是進製

同時c++還提供標準庫函式有:long int atol ( const char * str ); double atof (constchar* str);

stof()、strtod()、strtol()、strtoul()、atoll()、strtof()、strtold()、strtoll()、strtoull(),詳情可在網上查閱。

(4)string與int

利用stoi()直接轉換

例:string s=」1234」;int b=stoi(s)  結果為1234

利用atoi()間接轉換

例:string s=」1234」;int b=atoi(s.c_str())  結果為1234

(5)sprintf作用是將printf的輸出結果儲存在字串陣列中。

2.一些特殊的資料型別轉換

(1)type b= static_cast(a) 將type1 a的型別轉化為type2 b的型別;

使用範圍:完成編譯器認可的隱式型別轉換,但不支援指標與常見的int、float等型別轉換。

基本資料型別之間的轉換,如int->double;

int a = 6;

double b = static_cast(a);

派生體系中向上轉型:將派生類指標或引用轉化為基類指標或引用(向上轉型);

class base

class derived : public base

base *b;

derived *d = new derived();

b = static_cast(d);

(2) dynamic_cast

功能:執行派生類指標或引用與基類指標或引用之間的轉換

格式:①其他三種都是編譯時完成的,dynamic_cast是執行時處理的,執行時要進行執行時型別檢查;

②不能用於內建的基本資料型別的強制轉換。 dynamic_cast轉換如果成功的話返回的是指向類的指標或引用,轉換失敗的話則會返回null。

③使用dynamic_cast進行轉換的,基類中一定要有虛函式,否則編譯不通過。

需要檢測有虛函式的原因:類中存在虛函式,就說明它有想要讓基類指標或引用指向派生類物件的情況,此時轉換才有意義。

這是由於執行時型別檢查需要執行時型別資訊,而這個資訊儲存在類的虛函式表(關於虛函式表的概念)中,只有定義了虛函式的類才有虛函式表。

④在類的轉換時,在類層次間進行上行轉換時,dynamic_cast和static_cast的效果是一樣的。在進行下行轉換時,dynamic_cast具有型別檢查的功能,比 static_cast更安全。向上轉換即為指向子類物件的向下轉換,即將父類指標轉化子類指標。向下轉換的成功與否還與將要轉換的型別有關,即要轉換的指標指向的物件的實際型別與轉換以後的物件型別一定要相同,否則轉換失敗。可以實現向上轉型和向下轉型,前提是必須使用public或protected繼承;

例子:向上轉型:

class base;

class derived : public base;

int main()

base *pb;

derived *pd = new derived();

pb = dynamic_cast(pd);

return 0;

向下轉型:

class base           };

class derived : public base      };

int main()

(3) const_cast

只能對指標或者引用去除或者新增const屬性,對於變數直接型別不能使用const_cast;不能用於不同型別之間的轉換,只能改變同種型別的const屬性。

如:const int a= 0;   int b = const_cast(a);//不對的

const int *pi = &a;  int * pii = const_castpi;//去除指標中的常量性,也可以新增指標的常量性;

const_cast的用法:const_cast操作不能在不同的種類間轉換。相反,它僅僅把乙個它作用的表示式轉換成常量。它可以使乙個本來不是const型別的資料轉換成const型別的,或者把const屬性去掉。

(4)reinterpret_cast

interpret是解釋的意思,reinterpret即為重新解釋,此識別符號的意思即為資料的二進位制形式重新解釋,但是不改變其值.有著和c風格的強制轉換同樣的能力。它可以轉化任何內建的資料型別為其他任何的資料型別,也可以轉化任何指標型別為其他的型別。它甚至可以轉化內建的資料型別為指標,無須考慮型別安全或者常量的情形。不到萬不得已絕對不用

c c 資料型別轉換

c c 資料型別轉換1 float,char,string,cstring unicode 統一碼 萬國碼 單一碼 是一種在計算機上使用的字元編碼。它為每種語言中的每個字元設定了統一並且唯一的二進位制編碼,以滿足跨語言 跨平台進行文字轉換 處理的要求。1990年開始研發,1994年正式公布。隨著計算...

C C 資料型別轉換

在c c 中,整型 單精度 雙精度及字元型資料可以進行混合運算,即雙目運算子兩邊的運算元型別可以不同。當表示式中不同型別的資料進行運算時,會發生資料型別的轉換。c c 中有兩種型別轉換的方法 自動型別轉換和強制型別轉換。所謂自動型別轉換是指在不同型別資料進行混合運算時,系統會自動進行資料型別的轉換。...

python基礎篇之資料型別

python 中有四個非常常用的資料型別,分別是字串,列表,元組和字典。下面就來介紹這四個基本的資料型別。python 對字串的處理是非常強的,所以掌握一些 python 對字串的基本操作是非常有必要的.在 python2 裡面預設都是用 unicode 編碼的,而 windows 裡面的檔案預設是...