1、c++中提供了字串到基本型別轉換的函式,在windows下也提供了對應的基本型別到字串轉換的函式(在linux沒有,所以需要跨平台時不能使用)。
2、字串到基本型別轉換的介面包括atoi(字串轉int),atol(字串轉long),_atoi64(字串轉long long,注意前面有下滑線),atof(字串轉double);非數字字串轉換時,不會拋異常或奔潰。
3、windows基本型別轉換到字串可以用itoa(int轉字串),ltoa(long轉字串),_i64toa(long long轉字串),沒有ftoa函式,轉換的時候要保證傳入的字元陣列空間足夠,否則不會報錯,但會寫壞其他的記憶體值。
4、可以用sprintf和stringstream來做基本型別轉換到字串,這個是跨平台的。
5、可以用boost的lexical_cast來做各種型別間轉換,包括基本型別之間。字串到基本型別轉換時,如果字串不符合轉換到的型別格式,也能進行轉換。
以atoi為例,規則如下:
1、如果字串是乙個整數,那麼正確轉換。
2、如果包含不能非數字,去掉非數字字元後面的所有字元。
3、如果字元是乙個浮點數,則丟棄小數部分。
4、如果大於最大值,轉換成最大值,如果小於最小值,轉換成最小值。
下面是乙個測試樣例。void test()
輸出結果如下:
12 32 2147483647 0 3422342
windows基本型別轉換到字串時,如果傳入的字元陣列空間不足,不會截斷,這會導致寫壞不該寫的記憶體空間,所以是比較危險的。
下面是乙個測試樣例。void test()
輸出結果如下:,
1111011100110101100101000000000
sprintf對基本型別轉換到字串時,如果傳入的字元陣列空間不足,不會截斷,這會導致寫壞不該寫的記憶體空間,所以需要保證分配足夠的陣列空間。void test()
輸出結果如下
1000
234324234234234
100.234001
3242342.323242
stringstream對基本型別轉換到字串時,不會出現sprintf的問題,內部使用的std::string來儲存,效率上會低一些。注意,double輸出採用的是科學計數法。
void test()
輸出結果如下
1000
234324234234234
100.234
3.24234e+006
lexical_cast支援型別間互轉,不過不能將基本型別直接轉成char,需要先轉成string,再轉成char。而且lexical_cast在型別不能轉換時,會丟擲異常。
void test()
catch (boost:
:bad_lexical_cast* e)
}
輸出結果如下100.234001
343.322998
100.2340011597 100.2340011597
1、做字串到基本型別轉換時,可以採用atoi,atof等函式,但需要注意字串和要轉換的型別不符合時,也能轉換,用lexical_cast函式則要求能正確轉換,否則會丟擲異常,對異常需要做處理。
2、做基本型別到字串轉轉換時,可以用sprintf,stringstream,lexical_cast,不建議用非標準的itoa函式。sprintf適合轉成c風格字串,但需要分配足夠的緩衝區,否則會寫壞其他記憶體,而lexical_cast不存在這個問題,但不能直接轉換成char,在沒用boost庫的時候可以採用stringstream。
3、lexical_cast還能支援基本型別間的互轉,在將double,float互轉不會報錯,但long long 轉 int時,如果超出int的範圍會拋異常,而float轉int時,當轉換的誤差超過一定值也會拋異常。
字串和基本型別之間的轉換
基本型別和字串型別之間的轉換 基本型別轉換成字串型別3種方法 1.使用包裝類的tostring 方法 2.使用string類的valueof 方法 3.使用空字串加基本型別的 拼接 如下例子 int a 8 方法1 string str integer.tostring a 方法2 string s...
基本型別與字串型別之間的轉換
基本型別 字串 string 基本型別 最簡單的方法 工作中常用 包裝類的靜態方法tostring 引數 不是object類的tostring 過載 string str integer.tostring int static string tostring int i 返回乙個表示指定整數的str...
java 基本型別和字串之間進行轉換
基本型別轉換為字串有三種方法 1.使用包裝類的 tostring 方法 2.使用string類的 valueof 方法 3.用乙個空字串加上基本型別,得到的就是基本型別資料對應的字串 將基本型別轉換為字串 int str 100 string str1 integer.tostring str 方法...