• 【Qt之QString】数值与进制字符串间的转换详解


    在Qt中,可以使用QString类提供的一些方法来进行数值和进制字符串之间的转换。

    以下是示例:

    1. 将整数转换为进制字符串:

    QString类的number静态方法用于将整数转换为字符串表示,并且可以指定转换的进制。方法的定义如下:

    static QString number(int n, int base = 10);
    
    • 1

    参数的具体含义如下:

    • n:要转换的整数值。
    • base:转换的进制,默认为10(十进制)。

    该方法将整数值n转换为字符串表示,并返回一个QString对象。可以通过指定base参数来选择不同的进制数(例如,2表示二进制,8表示八进制,16表示十六进制)。

    int intValue = 42;
    QString hexString = QString::number(intValue, 16); // 十六进制字符串
    QString octString = QString::number(intValue, 8); // 八进制字符串
    QString binString = QString::number(intValue, 2); // 二进制字符串
    
    qDebug() << hexString; // 输出结果:"2A",十六进制表示
    qDebug() << octString; // 输出结果:"52",八进制表示
    qDebug() << binString; // 输出结果:"101010",二进制表示
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在上述示例中,整数值42被转换为不同进制的字符串表达形式。QString::number方法通过指定不同的base参数,可以方便地进行进制转换。

    2. 将进制字符串转换为整数:

    QString类的toInt方法用于将字符串转换为整数,并返回转换后的整数值。方法的定义如下:

    int toInt(bool* ok = nullptr, int base = 10) const;
    
    • 1

    参数的具体含义如下:

    • ok:一个可选的指向bool类型的指针,用于指示转换是否成功。如果指定了ok且转换成功,则*ok将被设置为true;如果转换失败,则*ok将被设置为false。如果不关心转换的成功与否,可以将ok参数设置为nullptr
    • base:转换的进制,默认为10(十进制)。

    该方法将调用它的QString对象表示的字符串尝试转换为整数,然后返回这个整数值。可以通过指定base参数来选择不同的进制数(例如,2表示二进制,8表示八进制,16表示十六进制)。

    QString hexString = "2A";
    int intValue = hexString.toInt(nullptr, 16); // 解析十六进制字符串
    qDebug() << intValue; // 输出结果:42
    
    QString octString = "52";
    intValue = octString.toInt(nullptr, 8); // 解析八进制字符串
    qDebug() << intValue; // 输出结果:42
    
    QString binString = "101010";
    intValue = binString.toInt(nullptr, 2); // 解析二进制字符串
    qDebug() << intValue; // 输出结果:42
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在上述示例中,通过toInt方法将字符串转换为整数。对于十进制字符串,可以直接调用toInt方法,而对于其他进制字符串,可以使用toInt方法并指定对应的base参数。如果转换成功,将会返回一个整数值。如果指定了ok参数且转换成功,*ok将被设置为true,否则为false

    需要注意的是,如果字符串无法成功转换为整数,toInt方法将返回一个默认值0。如果需要判断转换是否成功,可以使用ok参数或者检查返回的整数值是否为0。

    3. 将浮点数转换为字符串:

    float floatValue = 3.14;
    QString floatString = QString::number(floatValue);
    qDebug() << floatString; // 输出结果:"3.14"
    
    double doubleValue = 3.14159265358979323846;
    QString doubleString = QString::number(doubleValue, 'g', 15); // 保留小数点后15位
    qDebug() << doubleString; // 输出结果:"3.14159265358979"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    4. 将字符串转换为浮点数:

    QString floatString = "3.14";
    float floatValue = floatString.toFloat();
    qDebug() << floatValue; // 输出结果:3.14
    
    QString doubleString = "3.14159265358979";
    double doubleValue = doubleString.toDouble();
    qDebug() << doubleValue; // 输出结果:3.14159265358979
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    此外,我们还可以使用.arg方法进行转换进行进制字符串与数值之间的转换。.arg方法允许使用占位符将数值插入到字符串中,并设置进制格式。
    以下是一些示例代码:

    5. 将整数插入进制字符串:

    int intValue = 42;
    QString hexString = QString("%1").arg(intValue, 0, 16); // 十六进制字符串
    QString octString = QString("%1").arg(intValue, 0, 8); // 八进制字符串
    QString binString = QString("%1").arg(intValue, 0, 2); // 二进制字符串
    
    qDebug() << hexString; // 输出结果:"2A",十六进制表示
    qDebug() << octString; // 输出结果:"52",八进制表示
    qDebug() << binString; // 输出结果:"101010",二进制表示
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    6. 将浮点数插入字符串:

    float floatValue = 3.14;
    QString floatString = QString("%1").arg(floatValue);
    qDebug() << floatString; // 输出结果:"3.14"
    
    double doubleValue = 3.14159265358979323846;
    QString doubleString = QString("%1").arg(doubleValue, 0, 'g', 15); // 保留小数点后15位
    qDebug() << doubleString; // 输出结果:"3.14159265358979"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    注意,在这里,使用了%1作为占位符来插入数值。arg方法的语法是arg(value, fieldWidth, base, formatChar)

    • value是要插入的数值。
    • fieldWidth是字段宽度,用于设置插入数值时字符串的长度。
    • base是要转换的目标进制。
    • formatChar是转换的格式字符,用于控制数值的显示格式。

    对于整数,可以省略fieldWidth参数。如果要插入浮点数,则可以使用'g'格式字符来指定有效位数。

    通过使用.arg方法,可以根据需要在字符串中插入不同进制的数值。

    asprinf()方法

    QString类的asprintf静态方法是一个格式化字符串的方法,可以用来将一个C风格的格式化字符串转换为QString对象。

    该方法的定义如下:

    static QString asprintf(const char *format, ...);
    
    • 1

    参数的具体含义如下:

    • format:一个C风格的格式化字符串,类似于printf函数中的格式化字符串。它可以包含一个或多个占位符,用于指定要在生成的字符串中替换的变量。

    asprintf方法使用类似于printf的语法,允许使用占位符来指定要在生成字符串中替换的变量,例如 %d 用于整数、%f 用于浮点数等。

    int age = 25;
    float height = 1.75f;
    QString description = QString::asprintf("I am %d years old and %.2f meters tall.", age, height);
    qDebug() << description; // 输出结果: "I am 25 years old and 1.75 meters tall."
    
    • 1
    • 2
    • 3
    • 4

    在上述示例中,使用asprintf方法将一个格式化字符串转换为QString对象。格式化字符串中的占位符 %d%.2f 分别被 ageheight 变量的值所替换,生成了一个描述字符串。最终,生成的字符串被赋值给了description变量,然后通过qDebug()输出。

    需要注意的是,asprintf方法是一个静态方法,可以直接通过QString类进行调用,而不需要创建QString对象的实例。

  • 相关阅读:
    唯众数据标注实训系统
    套接字编程:UDP通信程序编写、套接字接口、字节序转换接口
    css中设置元素大小的属性block-size
    第一篇章:JVM与Java体系结构
    基于单片机的语音存储与回放系统设计
    c语言、c++扩展介绍 ————柔性数组、零长数组。
    javascript选择器的封装,只需要写元素名或css类及id都可以选择到元素
    北斗导航 | 最小二乘模糊度估计方法(LSAR:Least Squares Ambiguity Resolution)
    2. 计算虚拟化简介
    时序预测 | MATLAB实现TCN-BiLSTM时间卷积双向长短期记忆神经网络时间序列预测
  • 原文地址:https://blog.csdn.net/MrHHHHHH/article/details/133798770