0
点赞
收藏
分享

微信扫一扫

C语言修炼——内存函数与数据的存储

pipu 13小时前 阅读 1
qt

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

   //-----------------------------------------------------------------------------------

  //---------------------这段代码是为了观察转换后的-------------------
    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();
}

举报

相关推荐

0 条评论