日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

在QT中结构体快速从二进制文件中读取数据

發布時間:2025/6/17 c/c++ 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在QT中结构体快速从二进制文件中读取数据 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這可能是一個比較基礎的問題,但由于剛開始學習c++,但是對我來說,結構體快速從二進制文件讀取數據,給我解決了很大的問題,這里我把方法寫出來,和有需要的人分享一下,高手看到了請多包涵。
我的二進制文件是按照結構體規定的格式進行存儲的,結構體成員比較多,數據量比較大。結構體結構如下:
?

  • struct MY_PARAM{
  • int ? ? m_atten;
  • double ?m_vbw, m_rbw;
  • double ?m_refPower, m_markerPower;
  • double ?m_centerFreqMHz, m_spanMHz, m_startFreqMHz, m_stopFreqMHz, m_markerFreqMHz;
  • double ?m_span, m_sweep;
  • int ? ? m_spectrum_points;
  • int ? ? m_iData[1024];
  • };

  • 讀取二進制文件時,如果按照一個數據一個數據去讀的話,需要編寫非常多重復的代碼,執行效率也比較慢。于是我就想有沒有辦法可以吧從二進制文件讀取的數據按照格式直接存放到結構體所在的內存,剛開始我打算用指針,進行內存拷貝,但是嘗試了很久沒有成功,因為QDataStream好像不支持內存拷貝(個人看法,可能使用方法不對)。
    然后我就想其它辦法,打算用容器實現,翻書進行查找的時候,突然翻到了共用體,然后就按照書上給的例子進行嘗試,最后嘗試成功。代碼如下:

  • //#pragma pack(push)
  • //#pragma pack(1)
  • union FILE_READBUFFER{
  • MY_PARAM m_param;
  • char header_pt[sizeof(m_param)];
  • };
  • //#pragma pack(pop)

  • 共用體定義如上,內容很簡單,就是包含一個結構體和一個char類型的數組,大小和結構體的大小相同。其中

  • #pragma pack(push)
  • //#pragma pack(1)
  • ……
  • //#pragma pack(pop)

  • 這幾句是定義內存對其方式的,這個需要和保存文件時的對其方式進行對應,括號中1就是1字節對其,4就是四字節對齊,本來我打算用1字節對其,結果發現讀取的部分數據錯誤,后來就把這幾句注釋掉了,按照默認格式進行對其,結果沒有錯誤。
    從二進制文件讀取數據,然后直接賦值給結構體的代碼如下:

  • QString filename=QFileDialog::getOpenFileName(this,tr("Open Files"),"",tr("Files(*.dat)"));
  • ReadDataFile(filename);
  • QFile myfile(filename);
  • myfile.open(QIODevice::ReadOnly);
  • QDataStream myfile_data(&myfile);
  • FILE_READBUFFER app_file_readbuffer;
  • myfile_data.readRawData(app_file_readbuffer.header_pt,sizeof(app_readbuffer));

  • 這樣就完成了全部的從二進制文件讀取數據并把值賦給結構體,后面就可以使用結構體中的數據了。
    代碼進行過刪減,可能部分地方有錯誤,有需要的朋友可以按照我這個思路自己編程進行驗證。

    轉載于:https://www.cnblogs.com/myclassok/p/9604586.html

    總結

    以上是生活随笔為你收集整理的在QT中结构体快速从二进制文件中读取数据的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。