声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 4059|回复: 18

[综合讨论] fwrite为什么不能一个字节一个字节的写入呢

[复制链接]
发表于 2009-7-23 12:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
大家好,我想将a中的数据一个字节一个字节的写入testa.dat文件中,可是下面这样写却不对,不知为什么?
a=[19 5 7 10 23 68 15 12 3 8 92 66 4 7 27 61 28 11 31 17];
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 00  0A 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');
发表于 2009-7-23 20:45 | 显示全部楼层

回复 地板 鱼宝宝 的帖子

将fw当引数输入即可!
a=[19 5 7 10 23 68 15 12 3 8 92 66 4 7 27 61 28 11 31 17];
fw=fopen('testa.dat','w'); fwrite(fw,a,'int8');
sub2(fw); ...
fclose(fw);

function sub2(fw)
b=[1:10]; fwrite(fw,b,'int8');
...

评分

1

查看全部评分

 楼主| 发表于 2009-7-23 21:40 | 显示全部楼层
:@P 谢谢chaching,总是无私的帮助别人!
引数的意思是形参吗?能不能把fw定义成global?
发表于 2009-7-23 23:27 | 显示全部楼层

回复 6楼 鱼宝宝 的帖子

也没什麽! 刚好会又不花太多时间!
抱歉! "形参"指什麽? 个人不确定!
我指的引数其意思是argument, 也就是varargin!
定义成global, 我想应该也可以吧! 不过没试过! LZ试下吧!
 楼主| 发表于 2009-7-24 11:53 | 显示全部楼层
:@( 今天试了,不行,写不进去。主程序中有循环,我想对每一次循环后都可以在testa.dat中看到结果,可是不行,怎么回事?
a=[19 5 7 10 23 68 15 12 3 8 92 66 4 7 27 61 28 11 31 17];
%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');
发表于 2009-7-24 14:32 | 显示全部楼层

回复 8楼 鱼宝宝 的帖子

请LZ再仔细看下5F的例子(个人试过!)
还有给齐出错提示! 不然真的很难猜测
 楼主| 发表于 2009-7-24 18:02 | 显示全部楼层
chaching,您5楼的程序我试过,没问题,只是testa.dat中写入的数据用UE打开之后都是小方块,fwrite中的'int8' 改为'int16'之后可以显示,但都多了高位的00,也就是说只能写两个字节,不能写一个字节,为什么?
发表于 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的资料干嘛要编辑? 不解!
发表于 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 发表
5F的程序我试过以fread读入matlab是没错的!
喔! LZ提醒我了!
一直想针对1F的东东, 说说看法, 最近公司事情很忙, 又以为LZ已解决, 所以就没提!
fwrite是以binary data写入档案, 其中int8指的是整数用8 bits表示, i ...

我就是想对每一个数用8bit表示写入*.dat文件中,这样可以得到一个十六进制单字节的文件,这样的文件要被VC调入进行进一步的处理,不知道我表达清楚了吗?为什么fwrite不能表示8bit呢,help fwrite时,这样也没错啊。
发表于 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 发表
C十几年前曾学过, 现在忘乾净了!
程式间传递资料, binary个人极少使用, 个人偏好使用ascii! 所以确实如何个人不确定!
若LZ是要将资料转至C读取, 怎会用文字编辑软体(UE)读? 为何不直接用C试试看! 试个小矩阵即可!
...

:@) ,不是用文字编辑软体(UE)读,而是用UE打开看看数据。
您的建议我会尝试一下,谢谢!
补充: “十几年前用过C”,:@L ,阁下是长辈了!谢谢长辈赐教。
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-19 00:51 , Processed in 0.067541 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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