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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

! |( K6 Q. o/ Y7 x8 W! c$ q  h1 lMatlab中关于二进制数据文件操作所使用的语言是标准的C,有关数据文件的编程方法与LabVIEW类似。/ o9 E5 ^3 v) D: ?8 z4 x, v
4 |' P, g2 `9 L" C7 u  O  V
1、文件的打开与关闭- D" @1 p. i; t) I. ~
1)打开文件& k' w; {: z4 y: @. i
在读写文件之前,必须先用fopen函数打开或创建文件,并指定对该文件进行的操作方式。fopen函数的调用格式为:
( y8 \  _$ I# j$ E: Y7 ufid=fopen(文件名,‘打开方式’)" S4 G. U; j& h, P+ \* R6 K
说明:其中fid用于存储文件句柄值,如果返回的句柄值大于0,则说明文件打开成功。文件名用字符串形式,表示待打开的数据文件。常见的打开方式如下:" \) M5 \: p+ F
‘r’:只读方式打开文件(默认的方式),该文件必须已存在。
3 T+ z( D  ]) q- p% \1 \1 r ‘r+’:读写方式打开文件,打开后先读后写。该文件必须已存在。
; T8 a/ A! s3 F3 d ‘w’:打开后写入数据。该文件已存在则更新;不存在则创建。
6 N# J' n; O* J' I; m5 [9 X ‘w+’:读写方式打开文件。先读后写。该文件已存在则更新;不存在则创建。
- f2 K$ D' |1 L7 O: M+ q" _9 Y ‘a’:在打开的文件末端添加数据。文件不存在则创建。& y; x  }" N3 i% ~) B
‘a+’:打开文件后,先读入数据再添加数据。文件不存在则创建。! k0 ^2 Z  T7 k! _+ p" `; D
另外,在这些字符串后添加一个“t”,如‘rt’或‘wt+’,则将该文件以文本方式打开;如果添加的是“b”,则以二进制格式打开,这也是fopen函数默认的打开方式。5 w0 O8 |4 ^- ~% t- O- n
2)关闭文件, V; F0 y& R& Y% y
文件在进行完读、写等操作后,应及时关闭,以免数据丢失。关闭文件用fclose函数,调用格式为:
+ M% }' f# k" p$ X% |( `sta=fclose(fid)4 v- q& t7 s3 T; n; C, {( a& u
说明:该函数关闭fid所表示的文件。sta表示关闭文件操作的返回代码,若关闭成功,返回0,否则返回-1。如果要关闭所有已打开的文件用fclose(‘all’)。
6 j3 Q! E6 m* C: T) |8 {* E+ e2、二进制文件的读写操作% x2 Q% Y# t1 I. c) S
1)写二进制文件0 X4 j( b' c& n2 t
fwrite函数按照指定的数据精度将矩阵中的元素写入到文件中。其调用格式为:
& L2 E) X, h; G2 |" _0 UCOUNT=fwrite(fid,A,precision)( o3 Z' a( L0 Q: _/ p$ G/ T( g
说明:其中COUNT返回所写的数据元素个数(可缺省),fid为文件句柄,A用来存放写入文件的数据,precision代表数据精度,常用的数据精度有:char、uchar、int、long、float、double等。缺省数据精度为uchar,即无符号字符格式。
3 X( |- R+ T: ]) @例6.8 将一个二进制矩阵存入磁盘文件中。
  c) T0 s# K3 w! K' z  n" b>> a=[1 2 3 4 5 6 7 8 9];
3 D% s9 d% W4 a% h! {>> fid=fopen('d:\test.bin','wb')   %以二进制数据写入方式打开文件
: h3 T& `, r' j( xfid =
$ h7 M( v1 ~# ^( d& ^  3           %其值大于0,表示打开成功# G8 k/ z& c; F; j* c
>> fwrite(fid,a,'double')
$ Y, O: `6 k+ m4 mans =
4 z% j5 B8 }6 Q1 M  9           %表示写入了9个数据
9 i' m( d( F* Y& e>> fclose(fid)
; h2 t# p. f1 v' ]5 l- bans =        ) S: x9 l7 E% A( ?  j3 A
  0           %表示关闭成功; K+ A( }0 p' L/ w( Q3 i: W% \, f, S  j
2)读二进制文件& V2 e! [3 F3 R& [: c# _  S6 K
fread函数可以读取二进制文件的数据,并将数据存入矩阵。其调用格式为:# M, v2 o, G  g0 H" I0 ]9 c2 ?
[A,COUNT]=fread(fid,size,precision)
- W6 O8 L) G5 Y7 ~+ J& H说明:其中A是用于存放读取数据的矩阵、COUNT是返回所读取的数据元素个数、fid为文件句柄、size为可选项,若不选用则读取整个文件内容;若选用则它的值可以是下列值:N(读取N个元素到一个列向量)、inf(读取整个文件)、[M,N](读数据到M×N的矩阵中,数据按列存放)。precision用于控制所写数据的精度,其形式与fwrite函数相同。% ^* @4 w6 H; G/ D
0 X9 T6 v9 G6 U6 ?7 [& j; J
%写一维数据至数据文件! ?) f) Y- n! k/ ~* e9 ?
n=0:pi/10:4*pi;
6 v5 s3 Z# g' ]y=sin(n);% ]: i3 f# Z, a
fip=fopen('C:\binary3.bin','wb');( Z2 \. ]7 A0 {0 f2 ~3 P  N' z
fwrite(fip,Pxx,'double');) a& m4 c$ R; E# B9 ?
fclose(fip);# z9 b6 S7 f# }7 b8 o( d6 h
& X' [8 {) t3 |% I
%从数据文件读取一维数据
$ p) t& [& i: h" O: B- lfip=fopen('C:\binary3.bin','rb');
, ?# j( Y/ E( d) d9 M[SIN,num]=fread(fip,[2,20],'double');%inf表示读取文件中的所有数据,[M,N]表示' U( b/ w2 z: g! `; d, e
%将读取的数据放置在M行N列中,N表示将读取的数据放置在1列中
- }* J1 v" ~% v4 Afclose(fip)
1 M  ?3 j9 I6 X  u* f/ `  g5 G3 ?" j" V: I
%写二维数据至数据文件' l4 ]9 t' V& u$ g$ u- b) V
n=0:pi/10:4*pi;
" `8 R  N- k( F% O6 X3 sy1=sin(n);y2=sin(n);y3=0.5*sin(n);$ G9 w3 ]  t; F  e
y=[y1;y2;y3];& S2 E' P" M. s0 n& Z$ g0 Y6 K
fip=fopen('C:\binary4.bin','wb');9 {: I& V7 \  V% S4 ?8 T/ S  k( o
fwrite(fip,y,'double');
) w7 }' {6 E* Afclose(fip); %返回指针的值为0,则表示存储数据正常, u, T& _2 _7 T0 S  Q; {' ~. h

5 h8 k& v& O' f1 l, |" D) `%从数据文件读取二维数据
7 ?- u1 n4 N5 X- v1 F% {fip=fopen('C:\binary4.bin','rb');
3 _# ^' c- \# y* O* [9 p[Array_2D,num]=fread(fip,inf,'double');%inf表示读取文件中的所有数据,[M,N]表示
# k6 P1 q* ~1 c* F6 s2 C%将读取的数据放置在M行N列中,N表示将读取的数据放置在1列中
8 i. C7 O' F6 g# ]& cfclose(fip)% ?2 w* u3 L" [3 O

' V' X( {; c8 h) v详细的范例如下。
# h3 E% j! B2 C+ k2 ]6 M$ I2 b% y' x. q/ T- C$ O; ]0 @
**************************************************************************************
2 z  R. G  B/ P; [/ z, v: c, a, ?
  c3 \* l8 ]& J! P6 m%写一维数据至数据文件! @( h, n2 L/ V4 T* l
n=0:pi/10:4*pi;; ?* U) F9 j- N, ~
y=sin(n);6 d+ F$ ~1 J8 D- s: k$ j
fip=fopen('C:\binary3.bin','wb');
. l+ P2 l6 J' C7 Wfwrite(fip,Pxx,'double');
/ I) j/ ?# s$ {  Nfclose(fip);
' J3 }; }9 J3 ~- [" v; N+ a: x$ v6 R3 y" i; O- B
%从数据文件读取一维数据/ L  p: I9 [5 g3 o6 j5 H
fip=fopen('C:\binary3.bin','rb');
0 g9 j6 |" v& I2 F[SIN,num]=fread(fip,[2,20],'double');%inf表示读取文件中的所有数据,[M,N]表示2 ~' l; F2 z( r9 A6 B- Z3 ]) O' k
将读取的数据放置在M行N列中,N表示将读取的数据放置在1列中+ L& B* W5 S8 z" t* z7 t
fclose(fip)
" c* O& j6 Y4 m' a) Y$ I( [6 X; y5 `$ p- b, x% A0 M6 p- H5 D
%写二维数据至数据文件
$ f9 o) C9 n& {n=0:pi/10:4*pi;
; S  Q* _1 G6 p- j% By1=sin(n);y2=sin(n);y3=0.5*sin(n);% v, f0 V& \3 _7 Q  u2 I& ^
y=[y1;y2;y3];8 N5 q1 o$ D3 A1 M  Z3 W
fip=fopen('C:\binary4.bin','wb');- Y$ c0 m7 d4 C
fwrite(fip,y,'double');4 \! [/ ~* G' l% v, y' O$ \
fclose(fip); %返回指针的值为0,则表示存储数据正常
) l4 i" E: n$ Z! Z1 z( n# [9 f- v5 r) _6 N
%从数据文件读取二维数据
' A1 W1 ?3 L1 X6 qfip=fopen('C:\binary4.bin','rb');& R. B1 g; t8 s$ n7 t* Z9 X9 e
[Array_2D,num]=fread(fip,[3,41],'double');%inf表示读取文件中的所有数据,[M,N]表示
9 H% F: g! @% g%将读取的数据放置在M行N列中,N表示将读取的数据放置在1列中
( q" O$ M/ e! n1 ~fclose(fip)* r+ k" _2 p' i8 e9 R* \; `
; h& n2 c4 Q  g
  G$ }( v7 D- U7 a* C7 ?

, p0 n, k4 ^1 p8 @' [7 K. h

该用户从未签到

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-6-19 02:09 , Processed in 0.062500 second(s), 23 queries , Gzip On.

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

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

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