从浮点数转换为QByteArray

7

有没有快速的方法将浮点值转换为字节表示(十六进制)并存储在QByteArray中?

之前使用数组和memcpy()做过类似的事情,但这似乎与QByteArray不太适用。

例如:

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

使用以下方式也可以正常运行:

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

我是不是实现方式有误,或者使用Qt有更好的方法?

谢谢。

2个回答

23

来自QByteArray类参考页面:

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.
}

5

我不确定你确切想要什么。

为了将二进制表示存入 QByteArray 中,您可以使用以下代码:

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

为了获得浮点数的十六进制表示,您可以添加以下内容:
QByteArray baHex = ba.toHex();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接