从float转换为QByteArray

rad*_*x07 5 c c++ qt

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

memcpy()在使用数组之前做过类似的事情,但这似乎并没有太好用QByteArray.

例如:

memcpy(&byteArrayData,&floatData,sizeof(float));
Run Code Online (Sandbox Code Playgroud)

可以通过其他方式使用:

float  *value= (float *)byteArrayData.data();
Run Code Online (Sandbox Code Playgroud)

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

谢谢

ere*_*eOn 19

QByteArray类参考页面:

float f = 0.0f;
QByteArray array(reinterpret_cast<const char*>(&f), sizeof(f));
Run Code Online (Sandbox Code Playgroud)

QByteArray使用存储在其中的float的内存内容初始化a .

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

array.append(reinterpret_cast<const char*>(&f), sizeof(f));
Run Code Online (Sandbox Code Playgroud)

也应该这样做.

换句话说,你只需执行相反的操作:

float f2;

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


CMi*_*cea 5

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

要将二进制表示形式填充到 QByteArray 中,您可以使用以下命令:

float f = 0.0f;
QByteArray ba(reinterpret_cast<const char *>(&f), sizeof (f));
Run Code Online (Sandbox Code Playgroud)

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

QByteArray baHex = ba.toHex();
Run Code Online (Sandbox Code Playgroud)