//上一篇文章,描写了怎么将数据已字节数组的形式写到Sqlite 数据库,那么。
//本文描述2种方法将浮点数数组转换为字节数组QByteArray
//在QT6.2.4 MSVC2019 调试通过
#include <QCoreApplication>
#include <QByteArray>
#include <QDebug>
#include <QElapsedTimer>
union FloatSplit//本union是为了观察转换前和转换后各字节的数是否一样,非必须
{
float floatValue; // 浮点数
struct {
uint8_t Byte0;
uint8_t Byte1;
uint8_t Byte2;
uint8_t Byte3;
} sFloatValues; // 结构体,包含4个8位符号整数
uint8_t Uint8Array[4];
};
static void func2()
{
const int len=1;
float f1_array[len];
f1_array[0]=10.111;
//-----------------------------------------------------------------------------
FloatSplit temp; //辅助观察转换前第1行,非必须
temp.floatValue=10.111; //辅助观察转换前第2行,非必须
for (int var = 0; var < len*4; ++var) //辅助观察转换前第3行,非必须
{ //辅助观察转换前第4行,非必须
uint8_t m=temp.Uint8Array[var]; //辅助观察转换前第5行,非必须
qDebug()<<m; //辅助观察转换前第6行,非必须
} //辅助观察转换前第7行,非必须
qDebug()<<"--------------"; //辅助观察转换前第7行,非必须
//----------------------------------------------------------------------------------
QByteArray ba;
//------------------------------------------------------------------------------
//-----------这一段注释的代码是转换方法1----------------------
// uint8_t* pt;
// pt =(uint8_t*)f1_array;
// ba.clear();
// for (int var = 0; var < len*4; ++var)
// {
// unsigned short a=*(uint8_t*)pt;
// ba.append(a);
// pt++;
// }
//-------------------------------------------------------------------------------------
//------------------转换方法2,qt的简化方法-------------------------------
ba.resize(len* sizeof(float)); // 确保QByteArray有足够的空间
memcpy(ba.data(), f1_array, len*4);
//memcpy(ba.data(), f1_array,len* sizeof(float));//可以代替上行
//-----------------------------------------------------------------------------------
//---------------------这段代码是为了观察转换后的-------------------
for (int var = 0; var < len*4; ++var)
{
uint8_t m=ba[var];
qDebug()<<m;
}
//-----------------------------------------------------------------------------------
}
int main(int argc,char* argv[])
{
QCoreApplication a(argc, argv);
QElapsedTimer t;
t.start();
//func();
func2();
qDebug()<<t.elapsed()<<"ms";
return a.exec();
}