//上一篇文章,描写了怎么将数据已字节数组的形式写到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();
 }