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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

读写bin

發布時間:2023/12/13 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 读写bin 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

工程中經常將參數文件存儲為bin格式, 但是實際中為了分析其參數, 也不好用C++去讀取調試它, 所以可以用matlab或者python去讀取它, 但是還是蠻坑的

Matlab中的讀取和寫入

寫入文件

比較坑的是, 一定要注意自己的文件存儲的類型, 比如數值是float還是double之類的, 不然很容易在讀取的時候出問題.

關于數字的寫入方法如下:

fileID=fopen('MatrixTest.bin','w');%w+是不擦除,直接附加內容 a=[1,2,3;4,5,6;7,8,9]; fwrite(fileID,a,'double');%存儲為double類型 fclose(fileID);

文本的寫入方法同樣:

fileID=fopen('TxtTest.bin','w');%w+是不擦除,直接附加內容 a='哈哈哈哈嗝'; fwrite(fileID,a,'char');%寫入格式char fclose(fileID);

讀文件

一定要與寫入的數據類型相同

讀取bin中存儲的矩陣

fileID=fopen('MatrixTest.bin'); A=fread(fileID,[17,17],'double') fclose(fileID); %% 輸出 A'ans =1 4 7 2 5 8 3 6 9

可以發現matlab是列讀取的, 如果我們知道矩陣的大小,那么就可以指定好

fileID=fopen('MatrixTest.bin'); A=fread(fileID,[3,3],'double') fclose(fileID); %輸出 A =1 2 34 5 67 8 9

如果我們將double類型替換成float,得到的結果就是

A =0 2.2500 01.8750 0 2.00000 2.4375 0

可以發現是完全錯誤的,當然我們不指定類型, 即去掉double, 最終的結果也是錯誤的, 因而這個格式需要非常嚴格.

讀取文本就需要用另一個函數native2unicode,而且不需要指定數據類型

fileID=fopen('TxtTest.bin'); A=fread(fileID); native2unicode(A') fclose(fileID); %輸出 ans =哈哈哈哈嗝

Python中的讀取和寫入

主要涉及到tofile和fromfile兩個函數, 同時也必須注意存儲的矩陣數值的類型

寫入文件

import numpy as np import sys a=np.arange(1,10,1).reshape(3,-1) a=np.asarray(a,dtype='float') a.tofile('matrix_a.bin')

這樣我們就在bin文件中存儲了一個矩陣, 類型為float

[[ 1. 2. 3.][ 4. 5. 6.][ 7. 8. 9.]]

讀取文件

讀取就很簡單了,就一個函數,只不過要提前知道數據類型

b=np.fromfile('matrix_a.bin','float') #輸出 #[ 1. 2. 3. 4. 5. 6. 7. 8. 9.]

總結

從這里可以發現, 無論是matlab還是python, 我們存儲和讀取的時候的數據類型一定要一致,不然讀到的結果就是錯誤的. 還可以發現matlab是按列存儲, python是按行存儲的

總結

以上是生活随笔為你收集整理的读写bin的全部內容,希望文章能夠幫你解決所遇到的問題。

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