小脉 发表于 2008-9-10 14:55

二进制文件读写的代码问题

以下是二进制文件的读写示例的代码:

function =binio_examp
%BINIO_EXAMP二进制文件读写示例
%打开二进制文件写入数据
fid=fopen('magic5.bin','wb');
%写入文本数据
count=fwrite(fid,'喂,你好吗?','int32');
%写入数据
fwrite(fid,magic(5),'int32');
%关闭文件
status=fclose(fid);
%打开二进制文件读取数据
fid=fopen('magic5.bin','rb');
%读取文本
S=fread(fid,count,'int32');
disp(['读取数据类型:',class(S)]);
disp(['读取数据内容:',char(S')]);
%读取数据
=fread(fid,'int32');
data=reshape(data,5,5);
%关闭文件
status=fclose(fid);


我想问一下:
(1)count=fwrite(fid,'喂,你好吗?','int32');
         %写入数据
         fwrite(fid,magic(5),'int32');
这里的“count=”为什么要写在上面的fwrite语句中,而不是下面?读取数据的个数要从上面开始吗?为什么不从写入数据开始呢,也就是下一行开始?我试验了一下出错了。想知道原理。
(2)disp(['读取数据内容:',char(S')]);这句,char(S')括号中的是什么意思啊?如果理解为转置,那开始的S也没以转置的形式放置啊,为什么这里要转置呢,而我看到magic(5)和S'是一样的,但是内部原理不懂。
希望大家能帮我解决这些问题,很基础,但是我忘记了很多。谢谢大家了!

sigma665 发表于 2008-9-10 15:26

1 有没有count=我觉得应该没有影响吧。“读取数据的个数要从上面开始吗?为什么不从写入数据开始呢,也就是下一行开始?”不知道你什么意思
2 S'是矩阵S的共轭转置。“那开始的S也没以转置的形式放置啊”什么开始

小脉 发表于 2008-9-10 15:44

回二楼朋友
1、count如果按照我所看的书上代码下面一小部分的解释,应该是代表读取的数据的个数。我试验了一下,把count= 放在写入数据的代码fwrite(fid,magic(5),'int32')的前面,即count=fwrite(fid,magic(5),'int32'),上面的代码count=fwrite(fid,'喂,你好吗?','int32');修改为fwrite(fid,'喂,你好吗?','int32');结果就出错了。所以感觉count的位置是有说道的,但是是什么说道想听听大家的讲解,我不明白。
2、代码中“S=fread(fid,count,'int32'); ”,这时的矩阵是magic(5),然后后面的代码“disp(['读取数据内容:',char(S')]);”使用的是S',那结果应该是magic(5)的转置,可是在命令行中运行时,键入>>=binio_examp后,结果中的矩阵却还是magic(5),没有转置啊。

望大家指教,谢谢。

sigma665 发表于 2008-9-10 16:35

1 我确定有没有count=都没有影响,出错原因是后面S=fread(fid,count,'int32');用到count这个变量。
2 S=fread(fid,count,'int32'); 这里你运行下,S不是个magic矩阵,而是一个6*1的矩阵
class(S)是获取类型
char(S')是将矩阵横着显示出来

lz,再建议你一下,运行程序,你就能发现问题之所在

小脉 发表于 2008-9-10 18:01

谢谢sigma665,我加了一条语句,看到S果然是一个6*1的矩阵,每个元素是5位的数。多谢帮忙,以后我一定细心运行程序。再次感谢!:)
页: [1]
查看完整版本: 二进制文件读写的代码问题