找回密码
 注册
关于网站域名变更的通知
查看: 493|回复: 2
打印 上一主题 下一主题

怎样在Matlab中读取和写入二进制数据

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-3-19 10:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x

% G1 O( k% J* K0 @2 [5 l0 dMatlab中关于二进制数据文件操作所使用的语言是标准的C,有关数据文件的编程方法与LabVIEW类似。
; j7 T$ g+ t- Z1 [' N  z1 P0 W
. @' E% b( p# P. c1、文件的打开与关闭
( A0 M9 h; S# [* n" u) U1)打开文件+ o7 M/ r& B4 R- n$ K0 [- m
在读写文件之前,必须先用fopen函数打开或创建文件,并指定对该文件进行的操作方式。fopen函数的调用格式为:; R# |  Q$ [" [5 t3 Q  r; _
fid=fopen(文件名,‘打开方式’)
' M; q$ t, _: a说明:其中fid用于存储文件句柄值,如果返回的句柄值大于0,则说明文件打开成功。文件名用字符串形式,表示待打开的数据文件。常见的打开方式如下:. _- }0 g* {7 u+ V8 i
‘r’:只读方式打开文件(默认的方式),该文件必须已存在。+ G( @. o. K1 d/ T1 |
‘r+’:读写方式打开文件,打开后先读后写。该文件必须已存在。; i8 J& c+ a' ]4 b
‘w’:打开后写入数据。该文件已存在则更新;不存在则创建。
$ G! p5 x/ \& T7 ~4 u- M1 X0 s ‘w+’:读写方式打开文件。先读后写。该文件已存在则更新;不存在则创建。
" Q  c) h3 }% l' B+ D. ~3 k. C ‘a’:在打开的文件末端添加数据。文件不存在则创建。; }; k& m- s: f. [' u
‘a+’:打开文件后,先读入数据再添加数据。文件不存在则创建。% n1 F6 a' w  V1 B: @! \  C- N1 K
另外,在这些字符串后添加一个“t”,如‘rt’或‘wt+’,则将该文件以文本方式打开;如果添加的是“b”,则以二进制格式打开,这也是fopen函数默认的打开方式。
( Q1 V. D& ^3 r7 f! b2)关闭文件
+ E7 d3 |. p0 |' Y& ]9 k2 N# l文件在进行完读、写等操作后,应及时关闭,以免数据丢失。关闭文件用fclose函数,调用格式为:
4 c- K7 g# j7 @6 d, hsta=fclose(fid)! P% ?$ C- o( t1 x$ ^) `$ ^& q, e2 J
说明:该函数关闭fid所表示的文件。sta表示关闭文件操作的返回代码,若关闭成功,返回0,否则返回-1。如果要关闭所有已打开的文件用fclose(‘all’)。
. H% L8 R4 n6 b+ v8 S0 D2、二进制文件的读写操作
3 [7 G+ O: I5 ]1)写二进制文件( W. E1 b# c1 U/ Y# Z8 G" y
fwrite函数按照指定的数据精度将矩阵中的元素写入到文件中。其调用格式为:
2 Q6 ^- Z) e& z- gCOUNT=fwrite(fid,A,precision)' ]- Q+ j; s% K
说明:其中COUNT返回所写的数据元素个数(可缺省),fid为文件句柄,A用来存放写入文件的数据,precision代表数据精度,常用的数据精度有:char、uchar、int、long、float、double等。缺省数据精度为uchar,即无符号字符格式。. K. o$ S( S1 p, _! {
例6.8 将一个二进制矩阵存入磁盘文件中。
# v5 J3 U( D8 U5 |>> a=[1 2 3 4 5 6 7 8 9];
; b' T7 a2 V# s+ k6 u& A! b>> fid=fopen('d:\test.bin','wb')   %以二进制数据写入方式打开文件
' J9 f" d* O+ z/ o+ V' t  j1 @8 Z! @fid =5 E& }/ K" M" F* ?! E  K; h! C
  3           %其值大于0,表示打开成功: V+ Q% R! c( t  \3 G
>> fwrite(fid,a,'double')4 }7 _4 J) ~, i- F8 z
ans =
* D$ L7 B) f' z  9           %表示写入了9个数据
5 B2 S# q: r) `; s5 Q. j>> fclose(fid)+ H2 s, e3 ?& s3 ]1 A4 V' X
ans =        
9 ^8 }9 p) d2 `$ N1 G$ ^  0           %表示关闭成功- m# B9 K( ?& p8 |1 `
2)读二进制文件
$ ]: X; Q, |  wfread函数可以读取二进制文件的数据,并将数据存入矩阵。其调用格式为:5 a! R! {, N2 j6 P) k
[A,COUNT]=fread(fid,size,precision)
3 L) A, _* U4 R- C3 f说明:其中A是用于存放读取数据的矩阵、COUNT是返回所读取的数据元素个数、fid为文件句柄、size为可选项,若不选用则读取整个文件内容;若选用则它的值可以是下列值:N(读取N个元素到一个列向量)、inf(读取整个文件)、[M,N](读数据到M×N的矩阵中,数据按列存放)。precision用于控制所写数据的精度,其形式与fwrite函数相同。1 f# u# ]  R. q
8 E- ^, q; i- n, _% ~9 @3 \9 ?
%写一维数据至数据文件
$ C6 y  w% B$ Qn=0:pi/10:4*pi;
9 U# c3 x+ U: W* ly=sin(n);! r, s8 P) P2 {/ ^
fip=fopen('C:\binary3.bin','wb');
4 Q$ l" f/ B$ j+ j0 {* i2 }% Pfwrite(fip,Pxx,'double');
5 b. T3 q) G1 Bfclose(fip);$ n0 g; k% l1 ]( ^7 }

$ s$ G! n: S2 u7 ], T+ m%从数据文件读取一维数据. o( U" ^% x  p# s# r" z/ y. ?# E* [
fip=fopen('C:\binary3.bin','rb');
# e& k- d. O, U1 G7 A[SIN,num]=fread(fip,[2,20],'double');%inf表示读取文件中的所有数据,[M,N]表示
2 K" d* j. ?- b% X1 R% X%将读取的数据放置在M行N列中,N表示将读取的数据放置在1列中2 E; C3 t9 e% E, C
fclose(fip)) @# W+ K! E1 U# ]* X
. b6 S$ @) g4 b* D3 f* H: x' i8 F
%写二维数据至数据文件4 S& z/ B3 v. F2 b  e% `) U+ B- h, R
n=0:pi/10:4*pi;
9 _4 g  B3 A2 u" w* U- P9 e& xy1=sin(n);y2=sin(n);y3=0.5*sin(n);
8 @, X* t; `4 l( m2 U6 X+ t! {y=[y1;y2;y3];
# f  C! J! W1 }0 Yfip=fopen('C:\binary4.bin','wb');. s0 e1 K1 j, D
fwrite(fip,y,'double');2 E. @; u7 U+ T# {1 O
fclose(fip); %返回指针的值为0,则表示存储数据正常: t4 E, U- t( B% I/ B+ ]# f

' E" X" r- J: B2 O%从数据文件读取二维数据0 L5 f# `5 C/ B$ q2 @, _6 x! ]
fip=fopen('C:\binary4.bin','rb');
3 \: @+ u+ K2 }& v) o[Array_2D,num]=fread(fip,inf,'double');%inf表示读取文件中的所有数据,[M,N]表示: ]7 U9 N- J, e6 O( s
%将读取的数据放置在M行N列中,N表示将读取的数据放置在1列中
1 @: c) b4 Z; yfclose(fip), ~6 T# A6 t9 |

2 u( l! u( h, @8 {0 D- \详细的范例如下。
8 b8 e3 y* H* y! m2 Y, b' d
2 w) Q9 M: p; O) `- V; T& Z**************************************************************************************7 U) ?2 ^, z0 y, W
& i# [  _6 n. L( h4 v
%写一维数据至数据文件
2 \  {) M7 D. u" t# gn=0:pi/10:4*pi;
! w9 f3 D* ?# l! J3 s0 t) p+ \y=sin(n);
4 c; M" {6 e" f/ k; @/ p) Gfip=fopen('C:\binary3.bin','wb');/ \9 S4 ^; I  \. {
fwrite(fip,Pxx,'double');5 d! R7 S5 W% p
fclose(fip);' d# m. f, d$ X# I/ T; _

" L% C7 j2 w% e9 U: d%从数据文件读取一维数据1 w9 m2 C3 c4 Z! \
fip=fopen('C:\binary3.bin','rb');* ?' X& W& f5 P
[SIN,num]=fread(fip,[2,20],'double');%inf表示读取文件中的所有数据,[M,N]表示
) p1 w1 ]5 K$ o将读取的数据放置在M行N列中,N表示将读取的数据放置在1列中
; q9 ~  s9 c# n- xfclose(fip)6 E  c$ [* P  q6 v

8 }+ Q- k* I* i9 U% x  q/ Q  R%写二维数据至数据文件
1 n7 m, r) r' [6 _n=0:pi/10:4*pi;
2 N+ ]" b9 T, H) a4 q) j- gy1=sin(n);y2=sin(n);y3=0.5*sin(n);
# ?5 \' c! f6 ~+ Uy=[y1;y2;y3];
" t) u2 O1 j1 x# z$ r5 L1 Wfip=fopen('C:\binary4.bin','wb');
! h) E; F0 x3 S* Z0 Ffwrite(fip,y,'double');
9 d/ M" P, B; f+ n- |fclose(fip); %返回指针的值为0,则表示存储数据正常/ A' P# z' G+ Z% y* W& i; ~
& ?  r2 N6 G. V+ p% r" x, {
%从数据文件读取二维数据- }- k5 |  u& w* v0 p) V2 j6 i
fip=fopen('C:\binary4.bin','rb');6 b. D. x! q- i
[Array_2D,num]=fread(fip,[3,41],'double');%inf表示读取文件中的所有数据,[M,N]表示/ l# c3 k3 z) p: w6 K
%将读取的数据放置在M行N列中,N表示将读取的数据放置在1列中- @& k7 t8 y+ L7 [3 c, X9 b( B# G/ m
fclose(fip)
9 r  o! b3 W9 @) u
5 I1 m; l0 [. Y# q8 g
% k$ Q: z( G& q! A4 G/ _! \$ X# V1 |0 d# M3 F& S* z

该用户从未签到

2#
发表于 2020-3-19 18:20 | 只看该作者
看看如何在Matlab中读取和写入二进制数据。
  • TA的每日心情

    2019-11-29 15:37
  • 签到天数: 1 天

    [LV.1]初来乍到

    3#
    发表于 2020-3-20 18:10 | 只看该作者
    在Matlab中读取和写入二进制数据
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-11-24 07:14 , Processed in 0.140625 second(s), 23 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表