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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
$ E+ C1 D7 Q. f6 \/ C: u( d
Matlab中关于二进制数据文件操作所使用的语言是标准的C,有关数据文件的编程方法与LabVIEW类似。
0 d9 O9 t' q( I" \$ K
3 }5 M" x6 _4 e1、文件的打开与关闭
, Q& ~" y: P6 W$ N( Q) G' O3 s1)打开文件
4 ]9 m' s, n5 C  K8 Z. o- u( Q在读写文件之前,必须先用fopen函数打开或创建文件,并指定对该文件进行的操作方式。fopen函数的调用格式为:% u- I. b5 r5 i1 a  F6 c
fid=fopen(文件名,‘打开方式’)
# d; P4 s# `" a说明:其中fid用于存储文件句柄值,如果返回的句柄值大于0,则说明文件打开成功。文件名用字符串形式,表示待打开的数据文件。常见的打开方式如下:
# F* }  t' \& M" B ‘r’:只读方式打开文件(默认的方式),该文件必须已存在。
$ U2 J8 s% C& o. q ‘r+’:读写方式打开文件,打开后先读后写。该文件必须已存在。$ x  ~$ m  X! w! S
‘w’:打开后写入数据。该文件已存在则更新;不存在则创建。$ H; K  j) [+ n
‘w+’:读写方式打开文件。先读后写。该文件已存在则更新;不存在则创建。
" N0 t( z3 a( S. k' {6 C$ o ‘a’:在打开的文件末端添加数据。文件不存在则创建。
+ f) L0 d! Q8 f' k  N9 p- Q ‘a+’:打开文件后,先读入数据再添加数据。文件不存在则创建。4 m$ B% S$ e& |7 Z5 c+ Y& ~" J/ Y
另外,在这些字符串后添加一个“t”,如‘rt’或‘wt+’,则将该文件以文本方式打开;如果添加的是“b”,则以二进制格式打开,这也是fopen函数默认的打开方式。' s( u1 e4 c, i# H
2)关闭文件& e2 v+ B; B, H5 J% k$ R
文件在进行完读、写等操作后,应及时关闭,以免数据丢失。关闭文件用fclose函数,调用格式为:
$ _8 G1 n: p- @0 a- vsta=fclose(fid)
" T4 }8 Q  g" k- t说明:该函数关闭fid所表示的文件。sta表示关闭文件操作的返回代码,若关闭成功,返回0,否则返回-1。如果要关闭所有已打开的文件用fclose(‘all’)。; h7 R8 F. i# H9 `
2、二进制文件的读写操作
  c' U3 x# Q$ P0 M1)写二进制文件) w0 j' u( S5 i" g+ }! g4 ?
fwrite函数按照指定的数据精度将矩阵中的元素写入到文件中。其调用格式为:
) u: S  R; t7 LCOUNT=fwrite(fid,A,precision): `; v8 W3 D  [: R; D9 F, U
说明:其中COUNT返回所写的数据元素个数(可缺省),fid为文件句柄,A用来存放写入文件的数据,precision代表数据精度,常用的数据精度有:char、uchar、int、long、float、double等。缺省数据精度为uchar,即无符号字符格式。
2 A( Y2 t' C1 U- ~1 C0 s例6.8 将一个二进制矩阵存入磁盘文件中。
6 G6 A) e* m$ ~4 n>> a=[1 2 3 4 5 6 7 8 9];
3 u0 M( Z7 j3 r  ~>> fid=fopen('d:\test.bin','wb')   %以二进制数据写入方式打开文件
/ ?9 |1 ~! n! s$ yfid =7 Q- |3 [9 x+ Q6 f3 r4 `& e4 }
  3           %其值大于0,表示打开成功2 p5 R3 o! ^: s/ b3 h  {
>> fwrite(fid,a,'double')
2 a: |6 s! ]) d, K! eans =
  j* Y/ G: S. M% h# A6 k( w3 X  9           %表示写入了9个数据  m. g" ~. l2 y/ ]6 j" f- b
>> fclose(fid)/ ], c- g1 v0 j5 D+ E7 X( a3 S
ans =        
  F) W( Y. K  U0 r4 l3 J  0           %表示关闭成功
, j8 e. s: k) i2 k- n& E1 r7 D2)读二进制文件+ p3 m. E, ?: g& s9 _5 C1 M5 A- ^0 D
fread函数可以读取二进制文件的数据,并将数据存入矩阵。其调用格式为:
2 w" T, g# ]9 W  @2 `[A,COUNT]=fread(fid,size,precision)3 p2 P* i& u  a
说明:其中A是用于存放读取数据的矩阵、COUNT是返回所读取的数据元素个数、fid为文件句柄、size为可选项,若不选用则读取整个文件内容;若选用则它的值可以是下列值:N(读取N个元素到一个列向量)、inf(读取整个文件)、[M,N](读数据到M×N的矩阵中,数据按列存放)。precision用于控制所写数据的精度,其形式与fwrite函数相同。  c4 M4 s( l! A2 C1 o* W7 u2 N
# T1 e! a1 h9 y
%写一维数据至数据文件
* E0 _  C% t7 J2 @+ b6 ?* }n=0:pi/10:4*pi;' M0 Z- K) a+ e7 O* P3 a+ m0 V
y=sin(n);
9 [0 v/ H  h! @. ]; `# ]3 g3 Rfip=fopen('C:\binary3.bin','wb');9 R, m6 V7 u$ j6 n/ |
fwrite(fip,Pxx,'double');
* ?' m: M  F3 M: ?/ D9 J) Nfclose(fip);3 z2 O8 G, y: f
4 j  A# {1 j* |$ {
%从数据文件读取一维数据& R/ q) x" @1 g4 ]
fip=fopen('C:\binary3.bin','rb');
+ }# `# b% ]3 p[SIN,num]=fread(fip,[2,20],'double');%inf表示读取文件中的所有数据,[M,N]表示6 _: F$ t' _4 z. R2 w, i9 b  _
%将读取的数据放置在M行N列中,N表示将读取的数据放置在1列中% B& R3 V: X& z0 w. c
fclose(fip)$ c& s0 `' P# f* [

) W  T3 v: @) W, o; L. C! s/ v9 r%写二维数据至数据文件4 @1 q9 b/ W. p$ Z
n=0:pi/10:4*pi;
* Z- r# X) O6 v  Gy1=sin(n);y2=sin(n);y3=0.5*sin(n);! C0 X' {( ?; P, b6 F) D
y=[y1;y2;y3];9 P0 }' x7 c) |7 L* u
fip=fopen('C:\binary4.bin','wb');
, k; Q! @$ s1 K+ G- Vfwrite(fip,y,'double');
; G9 d  A3 @( F! m. o8 U' k; ?fclose(fip); %返回指针的值为0,则表示存储数据正常
8 F0 N, m) V- K/ Z8 }4 \
/ o+ ?) r0 e* C( d7 D%从数据文件读取二维数据
# w1 s: y6 k3 f4 j: lfip=fopen('C:\binary4.bin','rb');
5 ?+ l  V0 [9 x$ k. z5 Z& q3 W[Array_2D,num]=fread(fip,inf,'double');%inf表示读取文件中的所有数据,[M,N]表示! J! Y- ]5 ?) b" o9 H1 }1 a% n; u& H
%将读取的数据放置在M行N列中,N表示将读取的数据放置在1列中
$ {7 }: L/ I' Y# i! Hfclose(fip)/ M  G% f0 N8 X6 _! K9 S

9 X$ O9 s! V* l  Q7 s( _+ R详细的范例如下。9 q8 p: D- m* u# \7 k" Y1 p+ m

1 U1 D* [: B7 Q  x7 c  {; y**************************************************************************************2 s! V: L7 e" X5 @1 D6 o
1 Z  R2 ~4 N8 Q+ r! R
%写一维数据至数据文件
, {4 ~8 H. ?: |/ I0 jn=0:pi/10:4*pi;
* a1 N8 m  s* b. x( m$ M) ?y=sin(n);
# E& S. S; t7 _) a5 a/ W2 ~fip=fopen('C:\binary3.bin','wb');
4 ~' _) |% ?( C! Y7 Nfwrite(fip,Pxx,'double');
" c9 J2 _7 g  w, c7 {" Gfclose(fip);3 {+ |5 F+ Z4 K  [+ C' b( V

0 q; u- P7 @3 _" m9 ]%从数据文件读取一维数据3 ]0 s( g, d3 X) u! Q3 T
fip=fopen('C:\binary3.bin','rb');  y+ p1 ]" q% x
[SIN,num]=fread(fip,[2,20],'double');%inf表示读取文件中的所有数据,[M,N]表示9 h1 B$ G# l: h4 z! f* M
将读取的数据放置在M行N列中,N表示将读取的数据放置在1列中
3 c. X' \7 ?1 K* [% j0 Afclose(fip)7 J* ^- t  {; Y  w

: z: f8 Y; d2 G/ V  @%写二维数据至数据文件
7 s0 z8 \* A8 C6 |7 c' Cn=0:pi/10:4*pi;$ A' }6 k: n3 U) {6 v
y1=sin(n);y2=sin(n);y3=0.5*sin(n);" }% H& S; ~2 j: L! S6 t7 }% W
y=[y1;y2;y3];. s1 X( @+ n/ K% i& g! c
fip=fopen('C:\binary4.bin','wb');5 W5 y  K* t/ v, m
fwrite(fip,y,'double');2 ^+ i' g$ r$ u( o4 B% a
fclose(fip); %返回指针的值为0,则表示存储数据正常
9 J1 ^' `% p) W: ^6 g4 m* L
; |# w+ W+ W9 R0 H: z%从数据文件读取二维数据
8 ]" c+ ]9 S, J4 ?4 G% [fip=fopen('C:\binary4.bin','rb');7 K! y& y3 O1 {
[Array_2D,num]=fread(fip,[3,41],'double');%inf表示读取文件中的所有数据,[M,N]表示
3 _$ ]: ?" u  P* u6 c3 S. y( V. d/ Z%将读取的数据放置在M行N列中,N表示将读取的数据放置在1列中
8 B0 n7 X+ E  F8 g/ Vfclose(fip)6 {; F- ]: S8 X# s, f- _
" Y& U0 J! Z2 ^
% l' u. t% r' X& {, |/ m, b

' a! v, f; a6 X

该用户从未签到

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 09:44 , Processed in 0.140625 second(s), 23 queries , Gzip On.

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

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

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