• C++整型、浮点型与字符串型相互转换


    更多内容请访问 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);

    参考资料

    C语言itoa()函数和atoi()函数详解(整数转字符C实现)
    有关int,float,double型与字符串char*类型的相互转换
    Strtol()详解
     
    转在于:https://www.cnblogs.com/onycea/p/5400681.html
  • 相关阅读:
    针对Python基本数据类型的操作
    Could not transfer artifact org.apache.maven.plugins:maven-clean-plugin:pom:2.5 from 这类问题的解决方法
    校招有感:计算机专业毕业生如何找工作(Java方向)
    我用了半年的时间,把python学到了能出书的程度
    Java面试官经验谈:如何甄别候选人真实的能力,候选人如何展示值钱技能
    Java字节码与反射机制
    以我的亲身经历,聊聊学python的流程,同时推荐学python的书
    面试时通过volatile关键字,全面展示线程内存模型的能力
    如果很好说出finalize用法,面试官会认为你很资深
    C# post json和接收json
  • 原文地址:https://www.cnblogs.com/tianjifa/p/10441715.html
Copyright © 2020-2023  润新知