aabbccddeer 2024-09-24 10:29 采纳率: 0%
浏览 12

QT 16进制转浮点数


QString strHex = ui.six_float1->text();
int c = strHex.toInt(nullptr, 16);
float d = *(float*)&c;
QString radiation = QString("%1").arg(d);
ui.six_float2->setText(radiation);

这段代码是从网上复制来的,经实际运行发现,只能转化正数,不能转化负数。
例如:输入 4016C8B4 可以转换为2.356,但是输入C016C8B4不能转化成-2.356。
经单步调试发现,十六进制转到int型变量c的时候就错了,toInt失败。
百思不得其解,有没有人给解答一下。

  • 写回答

2条回答 默认 最新

  • mideum 2024-09-24 17:05
    关注

    C016C8B4超出32位int的最大值7FFFFFFF范围了,所以会失败,你可以用uint和toUInt
    不过比较优雅的方式是先用fromHex转成QByteArray这样

    #include <QtEndian>
    QByteArray c = QByteArray::fromHex(strHex.toLatin1());
    float d = qFromBigEndian<float>(c.constData());
    
    评论 编辑记录

报告相同问题?

问题事件

  • 修改了问题 9月24日
  • 创建了问题 9月24日

悬赏问题

  • ¥15 需要写计算过程,不要写代码,求解答,数据都在图上
  • ¥15 向数据表用newid方式插入GUID问题
  • ¥15 multisim电路设计
  • ¥20 用keil,写代码解决两个问题,用库函数
  • ¥50 ID中开关量采样信号通道、以及程序流程的设计
  • ¥15 U-Mamba/nnunetv2固定随机数种子
  • ¥15 C++行情软件的tick数据如何高效的合成K线
  • ¥15 vba使用jmail发送邮件正文里面怎么加图片
  • ¥15 vb6.0如何向数据库中添加自动生成的字段数据。
  • ¥20 在easyX库下编写C语言扑克游戏跑的快,能实现简单的人机对战