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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

6 Z0 K8 r0 V2 bMatlab中关于二进制数据文件操作所使用的语言是标准的C,有关数据文件的编程方法与LabVIEW类似。
4 C0 P3 Y. b# b' m' @. _9 N! M/ y: I- \4 T1 t
1、文件的打开与关闭
9 g1 ~& v- B" v# ^$ q/ ~1 v1)打开文件
" x$ k  s% b4 r" S. H9 u7 ]在读写文件之前,必须先用fopen函数打开或创建文件,并指定对该文件进行的操作方式。fopen函数的调用格式为:
/ R  s& T2 F! mfid=fopen(文件名,‘打开方式’)
/ ^: F' p, X% Y4 ^说明:其中fid用于存储文件句柄值,如果返回的句柄值大于0,则说明文件打开成功。文件名用字符串形式,表示待打开的数据文件。常见的打开方式如下:
4 h0 @( E1 Q% L7 x: L! N ‘r’:只读方式打开文件(默认的方式),该文件必须已存在。- @7 Z3 M8 X$ m  k7 K; V4 K5 }/ \
‘r+’:读写方式打开文件,打开后先读后写。该文件必须已存在。, Z6 X* ^  ?, g  k2 j
‘w’:打开后写入数据。该文件已存在则更新;不存在则创建。
; S: _. o/ j/ I7 B ‘w+’:读写方式打开文件。先读后写。该文件已存在则更新;不存在则创建。/ B' q/ H3 C# l8 q( o3 {
‘a’:在打开的文件末端添加数据。文件不存在则创建。0 z7 z2 N( @$ o. c# c
‘a+’:打开文件后,先读入数据再添加数据。文件不存在则创建。6 K8 |  |7 Q& ^8 g3 q& N. I, [2 [
另外,在这些字符串后添加一个“t”,如‘rt’或‘wt+’,则将该文件以文本方式打开;如果添加的是“b”,则以二进制格式打开,这也是fopen函数默认的打开方式。+ W0 x; z0 i  P0 v4 d
2)关闭文件/ G0 z5 F- B. o+ a
文件在进行完读、写等操作后,应及时关闭,以免数据丢失。关闭文件用fclose函数,调用格式为:1 T$ N7 X5 k, g( d7 f
sta=fclose(fid)% \4 z9 v  [' B; `
说明:该函数关闭fid所表示的文件。sta表示关闭文件操作的返回代码,若关闭成功,返回0,否则返回-1。如果要关闭所有已打开的文件用fclose(‘all’)。8 l! w* p" @( G2 \% J6 I* j
2、二进制文件的读写操作
/ r/ R9 ~3 y* J' Q1)写二进制文件+ h" c1 c( Z; j3 l. Y1 c2 O
fwrite函数按照指定的数据精度将矩阵中的元素写入到文件中。其调用格式为:
* w/ t/ K* [( Z; LCOUNT=fwrite(fid,A,precision)
: S7 F$ \/ j$ H7 F0 E8 ^说明:其中COUNT返回所写的数据元素个数(可缺省),fid为文件句柄,A用来存放写入文件的数据,precision代表数据精度,常用的数据精度有:char、uchar、int、long、float、double等。缺省数据精度为uchar,即无符号字符格式。1 X" p, U% t8 S* J5 M1 v
例6.8 将一个二进制矩阵存入磁盘文件中。6 J3 l4 L; g+ i" d
>> a=[1 2 3 4 5 6 7 8 9];. y% w/ }- e: H+ ~% B) u
>> fid=fopen('d:\test.bin','wb')   %以二进制数据写入方式打开文件
! A) \! R! `& m. `) C; y+ t" ?fid =
0 o0 V' r  y  T! P  3           %其值大于0,表示打开成功
; y3 |  T2 {  r' P: k( m>> fwrite(fid,a,'double')$ z7 n" T1 h/ t0 B) H% V
ans =
; n/ t, V/ j0 x* z( w1 I  9           %表示写入了9个数据. a& ]) f! ]* X$ w
>> fclose(fid)* `6 z) e5 x" L' Q
ans =        ; o9 |6 ~7 E0 Q1 }9 P# u
  0           %表示关闭成功( \3 f: s: m5 m
2)读二进制文件
1 f" U% q5 B  H/ a5 ofread函数可以读取二进制文件的数据,并将数据存入矩阵。其调用格式为:2 A) I0 K- c" \; e: _4 D
[A,COUNT]=fread(fid,size,precision)" A$ {  T) p7 {" `
说明:其中A是用于存放读取数据的矩阵、COUNT是返回所读取的数据元素个数、fid为文件句柄、size为可选项,若不选用则读取整个文件内容;若选用则它的值可以是下列值:N(读取N个元素到一个列向量)、inf(读取整个文件)、[M,N](读数据到M×N的矩阵中,数据按列存放)。precision用于控制所写数据的精度,其形式与fwrite函数相同。
0 I' t' Z" R  T# j! i4 o5 s$ c* Q* T5 e# d! Z6 R
%写一维数据至数据文件0 C: J5 Y2 ?( u; Z; Y9 e- k# B
n=0:pi/10:4*pi;* e! `0 h4 F6 @- J( `$ N% _& r6 A
y=sin(n);- I, }7 H  t) l$ m, b8 }- Z# H. l, p
fip=fopen('C:\binary3.bin','wb');
- K. }& A0 ^7 `7 I/ qfwrite(fip,Pxx,'double');
" w; i3 D# l% Z* pfclose(fip);4 k$ A' R. \3 }1 u0 b, l

+ O, Q  T7 |. d%从数据文件读取一维数据
1 w$ H& E7 f) \# |0 \fip=fopen('C:\binary3.bin','rb');
! k" \3 t8 j; q& F) r* Y' M[SIN,num]=fread(fip,[2,20],'double');%inf表示读取文件中的所有数据,[M,N]表示. b& }$ P; }% E" D
%将读取的数据放置在M行N列中,N表示将读取的数据放置在1列中1 I4 D$ _5 B9 ]; g" P+ F
fclose(fip)& q) V7 c; _& c4 y! T" Q
, D  S1 x  M0 Q0 x: W
%写二维数据至数据文件
2 L& L: n' T2 H7 {: U( Dn=0:pi/10:4*pi;
  K  [: R7 c! m* M' ]/ N- ~5 Wy1=sin(n);y2=sin(n);y3=0.5*sin(n);. v% p+ `- w$ U: L2 S5 |1 v
y=[y1;y2;y3];# M, h3 p; [3 T4 I% W: k+ K+ M2 @
fip=fopen('C:\binary4.bin','wb');
  a- C; x( d/ d5 V4 `9 afwrite(fip,y,'double');
  c& @: F  `. P. h* x3 V5 ufclose(fip); %返回指针的值为0,则表示存储数据正常! \- F7 `' G$ _. u( O8 E

7 B% \0 ^+ t' D8 @1 W%从数据文件读取二维数据! c5 Y* T) D$ \; Z+ P* ~! G. f' F
fip=fopen('C:\binary4.bin','rb');  w" M* D- T! s( K
[Array_2D,num]=fread(fip,inf,'double');%inf表示读取文件中的所有数据,[M,N]表示$ i+ R* K5 |( |
%将读取的数据放置在M行N列中,N表示将读取的数据放置在1列中1 d4 s! S8 R  T  X' c% Z5 V: W
fclose(fip)
5 a/ v- y& D9 f8 F/ k& ]' {$ \! l; g9 U9 A3 F( x6 O3 T
详细的范例如下。$ }3 m& U$ Z0 z2 e/ ~3 s
$ D+ I/ d  O: R
**************************************************************************************
  T4 {- o5 m6 c4 y! _
. n) O3 ?8 V! w  S/ K8 L" h%写一维数据至数据文件1 A" M% }# _. V/ Y7 w1 T
n=0:pi/10:4*pi;4 S" e6 D2 E2 \/ w( @) J5 j
y=sin(n);2 L* I& b( I' Y
fip=fopen('C:\binary3.bin','wb');
, _& H  y, T2 Lfwrite(fip,Pxx,'double');3 {  l. Y% J  c* [  h6 t* P
fclose(fip);
% K2 D1 Q' C" v0 V, C; I% R& x2 M( k1 p% I5 g# N; j
%从数据文件读取一维数据3 @0 [$ [  R1 Y# |* j
fip=fopen('C:\binary3.bin','rb');
% [; `9 N8 C. \+ g[SIN,num]=fread(fip,[2,20],'double');%inf表示读取文件中的所有数据,[M,N]表示: y: l- K* V. E
将读取的数据放置在M行N列中,N表示将读取的数据放置在1列中9 r; J) A* F1 C# T8 a% K5 V
fclose(fip)  R# u7 L0 ]% u# C2 `0 q

4 q, _4 U6 C' |7 k' `6 ^8 w$ t6 A' ^%写二维数据至数据文件6 Y4 L3 L* h  e
n=0:pi/10:4*pi;9 t! [/ B8 n2 g+ \2 o6 x" q9 {) H
y1=sin(n);y2=sin(n);y3=0.5*sin(n);2 e+ {. }& u3 P) a
y=[y1;y2;y3];9 d' R; @$ ?4 s& p
fip=fopen('C:\binary4.bin','wb');
2 f: f& d9 t* k, efwrite(fip,y,'double');
) V4 L" v0 t" m/ s; Pfclose(fip); %返回指针的值为0,则表示存储数据正常- W4 Y* f: C: G, B+ k
, E& M: J4 v* P
%从数据文件读取二维数据
+ W' x$ A- N  N+ Ffip=fopen('C:\binary4.bin','rb');
$ e- `3 ?0 Q7 G0 c7 E$ C[Array_2D,num]=fread(fip,[3,41],'double');%inf表示读取文件中的所有数据,[M,N]表示$ a# ^9 K8 J) ?: Y
%将读取的数据放置在M行N列中,N表示将读取的数据放置在1列中4 x/ x8 R" o4 D
fclose(fip)
/ E$ S! B8 ?! [3 q$ @0 z" f! @
5 ^, H1 G! i$ V6 Z/ J' t. ]3 e; c: b" c

7 s4 Z/ |7 l2 e1 ^+ l/ n5 R5 G

该用户从未签到

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-8-13 10:39 , Processed in 0.109375 second(s), 23 queries , Gzip On.

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

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

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