【Qt】16进制转换格式字符串及二进制
  yQAl4kecrO8W 2023年12月22日 95 0



【Qt】16进制转换格式字符串及二进制

  • 16进制转换成字符串
  • 16进制转换成格式字符串
  • 16进制转换成字符串并每两位加空格
  • 16进制转换成二进制


16进制转换成字符串

可调用QString类的静态方法number(),此方法为重载,有以下重载

// 第一个参数为输入值,第二个为数字的进制
    static QString number(int, int base=10);
    static QString number(uint, int base=10);
    static QString number(long, int base=10);
    static QString number(ulong, int base=10);
    static QString number(qlonglong, int base=10);
    static QString number(qulonglong, int base=10);
    static QString number(double, char f='g', int prec=6);

示例:

QString strRes;

    // hex 2 string
    int nHex = 0xff;
    strRes = QString::number(nHex, 16);
    qDebug().noquote() << "[" << __FILE__ << __LINE__ << "]" << "hex 2 string:" << strRes;

结果:

[ ..\16To2\mainwindow.cpp 17 ] hex 2 string: ff

运行:

【Qt】16进制转换格式字符串及二进制_字符串

16进制转换成格式字符串

可调用QString类的静态方法static QString asprintf(const char *format, ...) 第一个参数为格式,后面的可以输入值。
0x:前缀加0x%x:表示以16进制形式输出整数
示例:

QString strRes;

    // hex 2 format string
    int nHex = 0xff;
    strRes = QString::asprintf("0x%x", nHex);
    qDebug().noquote() << "[" << __FILE__ << __LINE__ << "]" << "hex 2 format string:" << strRes;

结果:

[ ..\16To2\mainwindow.cpp 17 ] hex 2 format string: 0xff

运行:

【Qt】16进制转换格式字符串及二进制_开发语言_02

16进制转换成字符串并每两位加空格

示例:

QByteArray baHex = QByteArray::fromHex("11223344aabbccdd");
    QString strHex = baHex.toHex();
    strHex = strHex.replace(QRegularExpression("(..)"), "\\1 ");
    qDebug().noquote() << "[" << __FILE__ << __LINE__ << "]" << strHex;

结果:

[ ..\16To2\mainwindow.cpp 16 ] 11 22 33 44 aa bb cc dd

运行:

【Qt】16进制转换格式字符串及二进制_16进制_03


分析

  1. 通过QByteArray::fromHex("11223344aabbccdd")将十六进制字符串"11223344aabbccdd"转换为一个QByteArray对象,其中每个字节的值是由对应的十六进制字符表示的。
  2. 通过hexArray.toHex()将QByteArray对象转换为一个QString对象,QString对象中每个字符都是对应字节的十六进制表示。
  3. 使用QRegularExpression("(..)")创建一个正则表达式对象,在这个正则表达式中,"(…)"代表匹配两个字符。
  4. 通过hexStr.replace(QRegularExpression("(..)"), "\\1 ")对QString对象进行替换操作,将每两个字符之间插入一个空格。替换操作中的"\1"表示将匹配到的两个字符替换为这两个字符自身并加一个空格。

综合起来,这段代码的作用是将十六进制字符串"11223344aabbccdd"转换为一个格式良好的字符串,每两个字符之间用空格隔开,最终得到的结果是"11 22 33 44 aa bb cc dd"。

16进制转换成二进制

示例:

QString str = "0XFF";

    int nValue = str.toInt(nullptr, 16);
    qDebug().noquote() << "[" << __FILE__ << __LINE__ << "]" << nValue;

    str = str.setNum(nValue, 2);
    qDebug().noquote() << "[" << __FILE__ << __LINE__ << "]" << str;

结果:

[ ..\16To2\mainwindow.cpp 15 ] 255
[ ..\16To2\mainwindow.cpp 18 ] 11111111

运行:

【Qt】16进制转换格式字符串及二进制_开发语言_04


至此。


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年12月22日 0

暂无评论

推荐阅读
yQAl4kecrO8W