有没有快速的方法将浮点值转换为字节表示(十六进制)并存储在QByteArray
中?
之前使用数组和memcpy()
做过类似的事情,但这似乎与QByteArray
不太适用。
例如:
memcpy(&byteArrayData,&floatData,sizeof(float));
使用以下方式也可以正常运行:
float *value= (float *)byteArrayData.data();
我是不是实现方式有误,或者使用Qt有更好的方法?
谢谢。
来自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.
}
我不确定你确切想要什么。
为了将二进制表示存入 QByteArray 中,您可以使用以下代码:
float f = 0.0f;
QByteArray ba(reinterpret_cast<const char *>(&f), sizeof (f));
QByteArray baHex = ba.toHex();