【问题标题】:Convert from float to QByteArray从浮点数转换为 QByteArray
【发布时间】:2010-05-05 14:16:48
【问题描述】:

有没有一种快速的方法可以将浮点值转换为QByteArray 中的字节(十六进制)表示?

在使用数组之前已经对memcpy() 做过类似的事情,但这似乎对QByteArray 不太有效。

例如:

memcpy(&byteArrayData,&floatData,sizeof(float));

可以使用其他方式很好地使用:

float  *value= (float *)byteArrayData.data();

我只是实现了这个错误还是使用 Qt 有更好的方法?

谢谢

【问题讨论】:

    标签: c++ c qt


    【解决方案1】:

    来自QByteArray Class Reference 页面:

    float f = 0.0f;
    QByteArray array(reinterpret_cast<const char*>(&f), sizeof(f));
    

    将使用存储在其中的浮点数的内存内容初始化QByteArray

    如果您已经有一个并且只想将数据附加到它:

    array.append(reinterpret_cast<const char*>(&f), sizeof(f));
    

    也应该这样做。

    要反过来,你只需要执行相反的操作:

    float f2;
    
    if (array.size() >= sizeof(f2)
    {
      f2 = *reinterpret_cast<const float*>(array.data());
    } else
    {
      // The array is not big enough.
    }
    

    【讨论】:

      【解决方案2】:

      我不确定你到底想要什么。

      要将二进制表示填充到 QByteArray 中,您可以使用:

      float f = 0.0f;
      QByteArray ba(reinterpret_cast<const char *>(&f), sizeof (f));
      

      要获得浮点数的十六进制表示,您可以添加以下内容:

      QByteArray baHex = ba.toHex();
      

      【讨论】:

        猜你喜欢
        • 2014-04-24
        • 2019-08-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-11
        • 1970-01-01
        • 2012-03-28
        • 2017-03-15
        相关资源
        最近更新 更多