二进制文件问题

weiyiabout 2008-04-07 09:41:06
语句fprintf(fWrite,"%d ",j - 1);//%d后面有个空格,j 为随机数
用的是二进制文件写的格式生成文件如下:
46 41 41 46 46 58 46 46 41 46 46 41 29 41 29 41 29 29 29 41 29 41 41 46 46 58 46 63 53 53 53 58 53 50 53 53 53 53 53 53 58 53
我要是想定位到倒数第十个数的位置,用fseek函数应该怎么用?
谢谢
...全文
66 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
fprintf(fWrite,"%d ",j - 1);//%d后面有个空格,j 为随机数
表示,每个数后有一个空格
46 41 41 46 46 58 46 46 41 46 46 41 29 41 29 41 29 29 29 41 29 41 41 46 46 58 46 63 53 53 53 58 53 50 53 53 53 53 53 53 58 53
看样子全部是两位数
两位数加一个空格不就是3个字符,你不是想定位到倒数10个数吗?当然就是共30个字符了(记住你的最后一个数后面也有一个空格)。
-30表示指针往文件头方向移动,而SEEK_END表示从文件尾部开始移动。
记住不要回车符,回车符一个在文件中就占了两个字符(文本方式打开占一个字符,二进制方式打开占两个字符)。
weiyiabout 2008-04-07
  • 打赏
  • 举报
回复
每行一个数的话,文件指针读一个数就下移一行吗?
abupie 2008-04-07
  • 打赏
  • 举报
回复
如果fprintf(fWrite,"%d ",j - 1);是你写的,就直接定义成定长数字(%10d)吧,或者是每行一个数。
否则就要判断了, 建议用getc()一个一个字符检查吧。
weiyiabout 2008-04-07
  • 打赏
  • 举报
回复
-30是什么意思?
和空格有什么关系?
  • 打赏
  • 举报
回复
fseek(fp,-30,SEEK_END);//我以为有两个空格,只一个空格的话就是-30
  • 打赏
  • 举报
回复
如果全部是两位数的话还可以定位,但位数不确定时就不好办了。
fseek(fp,-40,SEEK_END);
  • 打赏
  • 举报
回复
要是格式固定的话根据文件大小算一下.
要是格式不固定的话,那就全读取到内存找吧.

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧