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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

+ K! |" N* s% S0 p- cMatlab中关于二进制数据文件操作所使用的语言是标准的C,有关数据文件的编程方法与LabVIEW类似。7 e* V; [8 T4 Z) J& x7 b& x
( i( @9 k* l' h( T6 t
1、文件的打开与关闭
/ e6 @8 i9 v6 N$ H" a5 }5 d1)打开文件7 p/ b. ~# o  U8 Y; I$ A+ ]3 F
在读写文件之前,必须先用fopen函数打开或创建文件,并指定对该文件进行的操作方式。fopen函数的调用格式为:
9 z- }2 ?. C' ^fid=fopen(文件名,‘打开方式’)
9 y2 ~  T9 m3 \7 M/ T说明:其中fid用于存储文件句柄值,如果返回的句柄值大于0,则说明文件打开成功。文件名用字符串形式,表示待打开的数据文件。常见的打开方式如下:
& M4 [8 ]8 j( i$ j" v/ e; K$ P- Z+ ` ‘r’:只读方式打开文件(默认的方式),该文件必须已存在。: x/ Q, y" ^, d6 }
‘r+’:读写方式打开文件,打开后先读后写。该文件必须已存在。) T. R1 h% t6 V8 |9 c/ C
‘w’:打开后写入数据。该文件已存在则更新;不存在则创建。1 N. y% w+ E  V! O" j: |
‘w+’:读写方式打开文件。先读后写。该文件已存在则更新;不存在则创建。
. z3 I9 K+ b/ D( ? ‘a’:在打开的文件末端添加数据。文件不存在则创建。
. Q2 [- U+ N6 J ‘a+’:打开文件后,先读入数据再添加数据。文件不存在则创建。
7 D' @" y9 [" ~8 p/ \另外,在这些字符串后添加一个“t”,如‘rt’或‘wt+’,则将该文件以文本方式打开;如果添加的是“b”,则以二进制格式打开,这也是fopen函数默认的打开方式。+ I/ h: i- \: W; L, ~3 C
2)关闭文件
/ i6 S- b- y! ?1 d1 U/ a文件在进行完读、写等操作后,应及时关闭,以免数据丢失。关闭文件用fclose函数,调用格式为:
3 k( Y9 Y6 I" y6 U3 t3 ~sta=fclose(fid)* \; o! |0 n- K0 m: I5 T
说明:该函数关闭fid所表示的文件。sta表示关闭文件操作的返回代码,若关闭成功,返回0,否则返回-1。如果要关闭所有已打开的文件用fclose(‘all’)。
2 S+ {7 I* X4 l2 j2、二进制文件的读写操作
( E. I0 K; E5 X+ Z4 Y: Y8 I' w6 l1)写二进制文件
8 Y0 K/ D5 X; E; |0 }fwrite函数按照指定的数据精度将矩阵中的元素写入到文件中。其调用格式为:
  K, J/ W2 i1 g: |: l3 dCOUNT=fwrite(fid,A,precision)
5 i. N. J5 K) C3 L$ C说明:其中COUNT返回所写的数据元素个数(可缺省),fid为文件句柄,A用来存放写入文件的数据,precision代表数据精度,常用的数据精度有:char、uchar、int、long、float、double等。缺省数据精度为uchar,即无符号字符格式。
" F& r' D3 z0 A例6.8 将一个二进制矩阵存入磁盘文件中。
$ S8 |3 E9 {$ s, Z1 l% u5 ]>> a=[1 2 3 4 5 6 7 8 9];0 f: l5 g4 J0 a+ T( [3 C6 _' b
>> fid=fopen('d:\test.bin','wb')   %以二进制数据写入方式打开文件8 X6 P6 D8 \# g/ y# K- c
fid =
( m0 P. V, o3 E, N  m  3           %其值大于0,表示打开成功
1 C+ S5 d) c; T  E- G9 R9 }. Y>> fwrite(fid,a,'double')$ o( ?* K" R- d( G
ans =
' x  V, r( Q: E8 K( P0 v  9           %表示写入了9个数据) n4 _% l1 H) `( `0 o: b
>> fclose(fid)) l; v) b- q+ E3 N1 P
ans =        % `3 O& z: q! B$ d
  0           %表示关闭成功
+ a2 @2 H1 j6 B2 ]1 u3 Y2)读二进制文件  Z6 s  M3 n* N* _4 o
fread函数可以读取二进制文件的数据,并将数据存入矩阵。其调用格式为:! l! [3 r- ]' S5 }- u
[A,COUNT]=fread(fid,size,precision)
( T: s  k9 p8 |2 I说明:其中A是用于存放读取数据的矩阵、COUNT是返回所读取的数据元素个数、fid为文件句柄、size为可选项,若不选用则读取整个文件内容;若选用则它的值可以是下列值:N(读取N个元素到一个列向量)、inf(读取整个文件)、[M,N](读数据到M×N的矩阵中,数据按列存放)。precision用于控制所写数据的精度,其形式与fwrite函数相同。0 s; s: q. d5 I- a, y
: [; T& e8 ^6 {( \
%写一维数据至数据文件
  O( g3 S. ]8 p7 D) \n=0:pi/10:4*pi;  ~9 P. |# T: E& e7 M1 p- U2 i$ Q3 h( j
y=sin(n);
' l- T  [" q- n- tfip=fopen('C:\binary3.bin','wb');
, o9 _9 _- m4 R, l. O7 Gfwrite(fip,Pxx,'double');
+ l( N" z& O$ _$ N" f7 ^fclose(fip);
% Z/ {4 I, ^$ ~# R: a
- R9 n! H! e. e4 {3 |%从数据文件读取一维数据# P% A! s0 V# r5 ]$ }
fip=fopen('C:\binary3.bin','rb');& Y' e( e8 ^1 e( I
[SIN,num]=fread(fip,[2,20],'double');%inf表示读取文件中的所有数据,[M,N]表示
: \- p! D# _- Z- t0 m0 g! s%将读取的数据放置在M行N列中,N表示将读取的数据放置在1列中# `# C1 o2 I/ |$ ?5 g+ R
fclose(fip)# j, \" z, x6 K) B
6 V; @7 h! P  e& ^9 q$ j
%写二维数据至数据文件
6 d( N: w5 z" r# N# En=0:pi/10:4*pi;
- N! E/ u7 c- G1 g" R% oy1=sin(n);y2=sin(n);y3=0.5*sin(n);
! H( o: u, k* I% by=[y1;y2;y3];% L* \, k* K8 A; M' R* }; j' b
fip=fopen('C:\binary4.bin','wb');8 N2 I' E( |/ @* L' {% n
fwrite(fip,y,'double');
4 x$ ~/ r% w$ y# p! B# ?/ Z- q- pfclose(fip); %返回指针的值为0,则表示存储数据正常
# }  M( _1 r) n1 V
5 w3 R; ~6 D: w4 y+ Q1 c" n( n%从数据文件读取二维数据- I4 |  |" u% D) s
fip=fopen('C:\binary4.bin','rb');* b! a2 h7 g7 g0 z
[Array_2D,num]=fread(fip,inf,'double');%inf表示读取文件中的所有数据,[M,N]表示9 O, Z, F( s  x) F
%将读取的数据放置在M行N列中,N表示将读取的数据放置在1列中
; ]* i- j  W! M7 Ofclose(fip)/ ?, I& F9 y9 j- l
( t$ d; z7 R( i( a, k$ P, T& e( W- P
详细的范例如下。
/ d% ?' I& S9 d/ K4 o) d( N1 P; U6 F+ i1 D- k" F; J! g
*************************************************************************************** @" _8 |( J3 V& I; _

$ u: U# Y' `; v/ D, v$ ?6 {%写一维数据至数据文件
# y' F  ]! @" I  D1 C) r, O5 ^n=0:pi/10:4*pi;
+ s; I5 D* l" n2 e, k9 T, D  Z- `y=sin(n);
3 N. J% a6 L) }/ o9 h0 rfip=fopen('C:\binary3.bin','wb');
# o+ J  j3 \: A7 b& M8 Ifwrite(fip,Pxx,'double');' K6 E# w" W6 i) l" R! b" ]3 h
fclose(fip);3 C' m- W0 Z7 Z# s( A, o
, Q8 j( _# A' d/ A7 A! O- T( f2 o
%从数据文件读取一维数据
. r- N6 L9 n6 d5 ~$ w) V3 Q% S% V4 cfip=fopen('C:\binary3.bin','rb');2 D0 @0 @8 A, l6 |. B6 @: ~
[SIN,num]=fread(fip,[2,20],'double');%inf表示读取文件中的所有数据,[M,N]表示  I3 [- P6 e  x) o' ]
将读取的数据放置在M行N列中,N表示将读取的数据放置在1列中
. P1 Z3 {# ^" H" C" P# R; I( T  lfclose(fip)
' z7 z% g% ~* v. `" g6 W
6 _; J3 G0 v+ ^, m" p" x* E' p4 p%写二维数据至数据文件4 E/ U0 _/ T& r7 w8 ~6 e3 Y
n=0:pi/10:4*pi;- e8 J( v$ h9 Z7 o1 Y( ]6 s
y1=sin(n);y2=sin(n);y3=0.5*sin(n);
$ F2 v  ~. k8 c0 w) r1 ay=[y1;y2;y3];
3 V# X, r  \1 @6 T) ^8 Y5 yfip=fopen('C:\binary4.bin','wb');. i3 c, R: j) {0 Z  T9 E! D
fwrite(fip,y,'double');* ?# z- L* m& W* {
fclose(fip); %返回指针的值为0,则表示存储数据正常
% a5 }) b) L$ b* y% M
7 m1 y# s  e  P  }6 a%从数据文件读取二维数据# O+ c; }3 F' R6 P' U: m
fip=fopen('C:\binary4.bin','rb');
$ J; B2 I7 `# M; e[Array_2D,num]=fread(fip,[3,41],'double');%inf表示读取文件中的所有数据,[M,N]表示
/ \3 K  e, k2 }" ^, E9 O3 w) T* I: E%将读取的数据放置在M行N列中,N表示将读取的数据放置在1列中
% [3 K) U: I1 H3 ]# ufclose(fip)
  K' y  Y; {6 T9 d4 @" R
8 V7 M, M  L  [- r0 v3 H9 w9 [* i

) w/ ?9 [' }* N% u: f
  • TA的每日心情

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

    [LV.1]初来乍到

    3#
    发表于 2020-3-20 18:10 | 只看该作者
    在Matlab中读取和写入二进制数据

    该用户从未签到

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

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-11-24 11:31 , Processed in 0.156250 second(s), 25 queries , Gzip On.

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

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

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