matlab与modelsim中的⽂件操作函数
matlab中 fscanf和fpintf是⼀对,⽤fprintf写的必须⽤fscanf来读。
fprintf格式fread和fwrite是⼀对,⽤fwrite写的必须⽤fread来读。
同样的数据,使⽤fprintf和fwrite写下去的是不⼀样的,但是使⽤其相应的读命令读上来的数据会是⼀样的。
⽂件格式:⽂本⽂件(ASCII⽂件)和⼆进制⽂件。我们平时能够⽤记事本看的⽂件就是⽂本⽂件。‘
⽂本⽂件使⽤fscanf格式读取。⼆进制⽂件⽤fread读取。
⽤⽂本格式写的话可以⽤⼗进制⼗六进制等读取,但是我觉得本质就是读出字符,然后把 \n或者空格等格式符去掉,之后留下所要的数据。
那么照这个思路来想的话,其实任何⽂本格式的⽂件都可以⽤格式%c读出,只不过每次需要指定读的长度并且跳过那些格式符不读。例如,我需要读以⽂本形式保存的ieee标准的double型数据,应该怎么办呢?
先贴⼀部分数据
4035cfac20000000 3fb31bdce0000000
4025f2a1e0000000 4033678ca0000000
40421bdd80000000 40432d7380000000
402811a080000000 3ffc620c40000000
4047ceb740000000 403a863280000000
40200abec0000000 4032233d60000000
402bc2e900000000 403d0901c0000000
4040058aa0000000 4017c70340000000
3ff908aaa0000000 40380aad80000000
401ed216c0000000 40472a3e00000000
40349c87a0000000 40343133e0000000
这是标准形式的ieee double格式的存储形式,第⼀⾏有两个数据,分别为21.811220 ,0.074644。
那我要读取这部分数据怎么办呢?前提是以⽂本形式保存的数据,以⼆进制形式保存的直接⽤fread读就⾏了。
⾸先先打开⽂件fid1=fopen('','r');
然后先读第⼀⾏的第⼀个数,16位。h=fscanf(fid1,'%c',16);
读完之后转化m=hex2num(h);
之后有空格,那就跳过去 fseek(fid1,1,'cof');
再读⼀个数l=fscanf(fid1,'%c',16);
读完再转化n=hex2num(l);
之后有个换⾏符是2位,跳过去fseek(fid1,2,'cof');
ok第⼀⾏读完,现在⽂件指针在第⼆⾏的第⼀个字节,以后继续照这样读就⾏了。
modelsim 中fprintf⽆效,⽽fwrite是以⽂本形式读写.
fwrite和fdisplay的区别在于fdisplay会在每次写结束后加\n换⾏但是fwrite则不会⾃动加,要想换⾏需要⼿动加\n.
modelsim 中⼀般使⽤readmemh和readmemb读取数据⽂件存到memory⾥边。数据要⽤空⽩或换⾏符隔开。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论