1. 程式人生 > >C++整型、浮點型與字符串型相互轉換

C++整型、浮點型與字符串型相互轉換

小數位數 tde 參考 std str using atof char size

前言

整型、浮點型與字符串的相互轉換可以用自帶的函數來實現,本人使用的是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);

參考資料

C語言itoa()函數和atoi()函數詳解(整數轉字符C實現)有關int,float,double型與字符串char*類型的相互轉換Strtol()詳解 轉在於:https://www.cnblogs.com/onycea/p/5400681.html

C++整型、浮點型與字符串型相互轉換