更多內容請訪問 www.uusystem.com
前言
整型、浮點型與字符串的相互轉換可以用自帶的函數來實現,本人使用的是vs2015,所以下面有些函數需要改變一下,請看下面的總結。
正文
一、整型轉字符串型
1. int轉為字符串
itoa(int _Value, char *_Buffer, int _Radix);
需改為_itos_s(int _Value, char *_Buffer, size_t _BufferCount, int _Radix);
_Radix:表示進制,若十進制則Radix為10
_BufferCount:存儲的大小,不可以比Buffer的長度大
#include <iostream> using namespace std; void main() { int num = 10; char str[3]; // str的長度最少為3,因為10雖然兩位,但還有一個結束符 _itoa_s(num, str, sizeof(str), 10); // int轉為字符串 cout << str << endl; // 輸出結果為10 }
2. long int轉為字符串
ltoa(long _Value, char *_Buffer, int _Radix);
改為_ltoa_s(long _Value, char *_Buffer, size_t _BufferCount, int _Radix);
3. 無符號長整型轉為字符串
ultoa(unsigned long _Value, char *_Buffer, int _Radix);
改為_ultoa_s(unsigned long _Value, char *_Buffer, size_t _BufferCount, int _Radix);
4. int型轉為寬字符串型
_itow(int _Value, wchar_t *_Buffer, int _Radix);
改為_itow_s(int _Value, wchar_t *_Buffer, size_t _BufferCount, int _Radix);
二、浮點型轉字符串型
1. double型轉為字符串
gcvt(double _Value, int _DigitCount, char* _DstBuf);
改為_gcvt_s(char* _Buffer, size_t _BufferCount, double _Value, int _DigitCount);
說明:顯示正負號、小數點
_Digitcount:顯示的位數,如1.25,顯示兩位是1.3(四舍五入),顯示三位是1.25
#include <iostream> using namespace std; void main() { double num = -1.235; char str[7]; // 在字符串中,正負號、小數點、結束符各占一位 _gcvt_s(str, sizeof(str), num, 3); // double轉為字符串,顯示三位,1.235四舍五入為1.24 cout << str << endl; // 輸出結果為-1.24 }
2. double轉換為字符串
ecvt(double _Value, int _DigitCount, int *_PtDec, int *_PtSign);
改為_ecvt_s(char *_Buffer, size_t _BufferCount, double _Value, int _DigitCount, int *_PtDec, int *_PtSign);
說明:不顯示小數點和正負號
_PtDec:表示小數點位置,若_PtDec為1,說明小數點左邊有一個數
_PtSign:表示正負號,0為正數,1為負數
#include <iostream> using namespace std; void main() { double num = -1.235; int Dec, Sign; // Dec:小數點位置,Sign:正負號 char str[5]; // ?至少5位 _ecvt_s(str, sizeof(str), num, 3, &Dec, &Sign); // double轉str,剔除正負號和小數點,顯示三位,1235四舍五入為124 cout << str << endl; // 輸出結果為124 cout << Dec << endl; // 輸出結果為1,小數點左面有一個數 cout << Sign << endl; // 輸出結果為1,是負數 }
3. double轉換為字符串
fcvt(double _Value, int _FractionalDigitCount, int *_PtDec, int *_PtSign);
改為_fcvt(char *_Buffer, size_t _BufferCount, double _Value, int _FractionalDigitCount, int *_PtDec, int *_PtSign);
說明:轉換結果中不包含小數點和正負號
_FractionalDigitCount:取小數位數,若_FractionalDigitCount為1,則取一位小數,要四舍五入
#include <iostream> using namespace std; void main() { double num = -1.235; int Dec, Sign; // Dec:小數點位置,Sign:正負號 char str[5]; // ?至少5位 _fcvt_s(str, sizeof(str), num, 2, &Dec, &Sign); // double轉str,剔除正負號和小數點,取兩位小數,1235四舍五入為124 cout << str << endl; // 輸出結果為124 cout << Dec << endl; // 輸出結果為1,小數點左面有一個數 cout << Sign << endl; // 輸出結果為1,是負數 }
三、字符串型轉整型
1.將字符串轉為int型
int atoi(const char *_String);
2. 將字符串轉為long型
long atol(const char *_String);
3. 將字符串轉為long型,並報告不能被轉換的所有剩余部分
long strtol(const char *_String, char **_EndPtr, int _Radix);
_Radix:表示進制,范圍為2~36和0
_EndPtr:指向字符串中不合法的部分
說明:若_Radix為2,則‘0’、‘1’合法,若_Radix為10,則‘0’、‘1’……‘9’合法,若_Radix為16,則‘0’,‘1’……‘f’合法
#include <iostream> using namespace std; void main() { long num_2, num_8, num_10, num_16; char str[20] = "1079aeg"; char *str1; num_2 = strtol(str, &str1, 2); // 二進制,10合法 cout << num_2 << endl; // 輸出2,二進制10在十進制中為2 cout << str1 << endl; // 輸出不合法的79aeg num_8 = strtol(str, &str1, 8); // 8進制,107合法 cout << num_8 << endl; // 輸出71,八進制107在十進制中為71 cout << str1 << endl; // 輸出不合法的9aeg num_10 = strtol(str, &str1, 10); // 10進制,1079合法 cout << num_10 << endl; // 輸出1079 cout << str1 << endl; // 輸出不合法的aef num_16 = strtol(str, &str1, 16); // 十六進制,1079ae合法 cout << num_16 << endl; // 輸出1079726,十六進制1079ae在十進制中為1079726 cout << str1 << endl; // 輸出不合法的g }
------
如若想詳細了解該函數,請看strtol()詳解
4. 將字符串轉為無符號長整型值,並報告不能被轉換的所有剩余部分
unsigned long strtoul(const char *_String, char **_EndPtr, int _Radix);
四、字符串型轉浮點型
1. 將字符串轉換為雙精度浮點型值
double atof(const char *_String);
2. 將字符串轉換為雙精度浮點型值,並報告不能被轉換的所有剩余數字
double strtod(const char *_String, char **_EndPtr);