鱼宝宝 发表于 2009-7-23 12:42

fwrite为什么不能一个字节一个字节的写入呢

大家好,我想将a中的数据一个字节一个字节的写入testa.dat文件中,可是下面这样写却不对,不知为什么?
a=;
fw=fopen('testa.dat','w');
fwrite(fw,a,'int8');
fclose(fw);

我希望testa.dat文件中被写入的数据是这样的:
13 05 07 0A 17.....

大家知道该怎么办吗?

波波球 发表于 2009-7-23 14:50

LZ是要把它转化为16进制码?
dec2hex?

鱼宝宝 发表于 2009-7-23 19:09

是的,以16进制写入testa.dat文件中,我不知道为什么fwrite函数中的类型不能为int8,若改为int16,则可以写入,只是写入的是两个字节,打开后如下:
13 00 05 00 07 000A 00 17 00.....

鱼宝宝 发表于 2009-7-23 19:20

对了,还有一个问题需要请教大家,如下:我在主函数中打开一个文件fw,但是我要在多个子函数中对其进行写入操作,该怎么样定义呢?每次写入的值不能覆盖掉原来的值,要紧随其后依次写入,该怎么办呢?这是一个挺基础也挺重要的问题,我在咱们版搜索了一下,没有,所以恳请知道的前辈指点,谢谢!
%main 函数
fw=fopen('testa.dat','w');
...
fclose(fw);
%sub1 子函数1
function sub1
fwrite(fw,a,'int8');

%sub2 子函数2
function sub2
fwrite(fw,b,'int8');

%sub3 子函数3
function sub3
fwrite(fw,c,'int8');

ChaChing 发表于 2009-7-23 20:45

回复 地板 鱼宝宝 的帖子

将fw当引数输入即可!
a=;
fw=fopen('testa.dat','w'); fwrite(fw,a,'int8');
sub2(fw); ...
fclose(fw);

function sub2(fw)
b=; fwrite(fw,b,'int8');
...

鱼宝宝 发表于 2009-7-23 21:40

:@P 谢谢chaching,总是无私的帮助别人!
引数的意思是形参吗?能不能把fw定义成global?

ChaChing 发表于 2009-7-23 23:27

回复 6楼 鱼宝宝 的帖子

也没什麽! 刚好会又不花太多时间!
抱歉! "形参"指什麽? 个人不确定!
我指的引数其意思是argument, 也就是varargin!
定义成global, 我想应该也可以吧! 不过没试过! LZ试下吧!

鱼宝宝 发表于 2009-7-24 11:53

:@( 今天试了,不行,写不进去。主程序中有循环,我想对每一次循环后都可以在testa.dat中看到结果,可是不行,怎么回事?
a=;
%main 函数
fw=fopen('testa.dat','w');

for u=1:300   
   sub1;   
   sub2;
   sub3;
end
...
fclose(fw);

%sub1 子函数1
function sub1
fwrite(fw,a,'int8');

%sub2 子函数2
function sub2
fwrite(fw,b,'int8');

%sub3 子函数3
function sub3
fwrite(fw,c,'int8');

ChaChing 发表于 2009-7-24 14:32

回复 8楼 鱼宝宝 的帖子

请LZ再仔细看下5F的例子(个人试过!)
还有给齐出错提示! 不然真的很难猜测

鱼宝宝 发表于 2009-7-24 18:02

chaching,您5楼的程序我试过,没问题,只是testa.dat中写入的数据用UE打开之后都是小方块,fwrite中的'int8' 改为'int16'之后可以显示,但都多了高位的00,也就是说只能写两个字节,不能写一个字节,为什么?

ChaChing 发表于 2009-7-24 22:25

回复 10楼 鱼宝宝 的帖子

5F的程序我试过以fread读入matlab是没错的!
喔! LZ提醒我了!
一直想针对1F的东东, 说说看法, 最近公司事情很忙, 又以为LZ已解决, 所以就没提!
fwrite是以binary data写入档案, 其中int8指的是整数用8 bits表示, int16指的是整数用16 bits表示, 并非16进位的转换!
若LZ想输出如1F所说13 05 07 0A 17...的样子, 可先以dec2hex转换成文字矩阵, 再以fprintf输出! 但这样的资料档案, 好像不能直接使用了!?
不是很确定LZ的需求, 说说希望对LZ有用!
UE是ultraedit吗? binary的资料干嘛要编辑? 不解!

ydlcsu 发表于 2009-7-25 14:36

fw=fopen('testa.dat','A'); %append方式打开文档,这样就不会把以有内容覆盖

[ 本帖最后由 ydlcsu 于 2009-7-25 15:50 编辑 ]

鱼宝宝 发表于 2009-7-26 08:17

原帖由 ChaChing 于 2009-7-24 22:25 发表 http://www.chinavib.com/forum/images/common/back.gif
5F的程序我试过以fread读入matlab是没错的!
喔! LZ提醒我了!
一直想针对1F的东东, 说说看法, 最近公司事情很忙, 又以为LZ已解决, 所以就没提!
fwrite是以binary data写入档案, 其中int8指的是整数用8 bits表示, i ...
我就是想对每一个数用8bit表示写入*.dat文件中,这样可以得到一个十六进制单字节的文件,这样的文件要被VC调入进行进一步的处理,不知道我表达清楚了吗?为什么fwrite不能表示8bit呢,help fwrite时,这样也没错啊。

ChaChing 发表于 2009-7-26 10:20

回复 13楼 鱼宝宝 的帖子

C十几年前曾学过, 现在忘乾净了!
程式间传递资料, binary个人极少使用, 个人偏好使用ascii! 所以确实如何个人不确定!
若LZ是要将资料转至C读取, 怎会用文字编辑软体(UE)读? 为何不直接用C试试看! 试个小矩阵即可!
基本上, 现在的matlab原始码已经是用C撰写了(以前使用fortran), binary资料转C读取应该不会有问题!
个人没VC可试, LZ自个试! 希望有好结果!

鱼宝宝 发表于 2009-7-27 11:53

原帖由 ChaChing 于 2009-7-26 10:20 发表 http://www.chinavib.com/forum/images/common/back.gif
C十几年前曾学过, 现在忘乾净了!
程式间传递资料, binary个人极少使用, 个人偏好使用ascii! 所以确实如何个人不确定!
若LZ是要将资料转至C读取, 怎会用文字编辑软体(UE)读? 为何不直接用C试试看! 试个小矩阵即可!
...
:@) ,不是用文字编辑软体(UE)读,而是用UE打开看看数据。
您的建议我会尝试一下,谢谢!
补充: “十几年前用过C”,:@L ,阁下是长辈了!谢谢长辈赐教。
页: [1] 2
查看完整版本: fwrite为什么不能一个字节一个字节的写入呢