在QT中结构体快速从二进制文件中读取数据
這可能是一個比較基礎的問題,但由于剛開始學習c++,但是對我來說,結構體快速從二進制文件讀取數據,給我解決了很大的問題,這里我把方法寫出來,和有需要的人分享一下,高手看到了請多包涵。
我的二進制文件是按照結構體規定的格式進行存儲的,結構體成員比較多,數據量比較大。結構體結構如下:
?
讀取二進制文件時,如果按照一個數據一個數據去讀的話,需要編寫非常多重復的代碼,執行效率也比較慢。于是我就想有沒有辦法可以吧從二進制文件讀取的數據按照格式直接存放到結構體所在的內存,剛開始我打算用指針,進行內存拷貝,但是嘗試了很久沒有成功,因為QDataStream好像不支持內存拷貝(個人看法,可能使用方法不對)。
然后我就想其它辦法,打算用容器實現,翻書進行查找的時候,突然翻到了共用體,然后就按照書上給的例子進行嘗試,最后嘗試成功。代碼如下:
共用體定義如上,內容很簡單,就是包含一個結構體和一個char類型的數組,大小和結構體的大小相同。其中
這幾句是定義內存對其方式的,這個需要和保存文件時的對其方式進行對應,括號中1就是1字節對其,4就是四字節對齊,本來我打算用1字節對其,結果發現讀取的部分數據錯誤,后來就把這幾句注釋掉了,按照默認格式進行對其,結果沒有錯誤。
從二進制文件讀取數據,然后直接賦值給結構體的代碼如下:
這樣就完成了全部的從二進制文件讀取數據并把值賦給結構體,后面就可以使用結構體中的數據了。
代碼進行過刪減,可能部分地方有錯誤,有需要的朋友可以按照我這個思路自己編程進行驗證。
轉載于:https://www.cnblogs.com/myclassok/p/9604586.html
總結
以上是生活随笔為你收集整理的在QT中结构体快速从二进制文件中读取数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数字变化滚动到指定数字的文字特效
- 下一篇: 数据方面高可用方案简单总结