请教如何读取这样的二进制文件

lixilin 2005-08-06 09:29:22
有一二进制文件,格式如下:
EBP文件格式:点标识号,点名,X坐标,Y坐标,H高程,点标志,作业区号
说明:
点标识号:为一整数,表示点的顺序,为系统内部使用。
点名:点的名称,为不超过8字符长的字符串。
X、Y、H为点的三维坐标。
点标志:0—参与构网,1—参与构网且注记高程,2—不参与构网,不注记高程,3—不参与构网,注记高程,4— 等高线上点。

该如何读取呢?
谢谢!
...全文
231 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
pharos 2005-08-13
  • 打赏
  • 举报
回复
先用stat取文件长度;然后开辟指针空间,长度为文件长度;用循环结构每读取相应长度空间,指针所指地址指针加相应长度,用位操作转换为相应类型,如此下去到 当前长度+指针初始地址<文件长度
seahoyel 2005-08-12
  • 打赏
  • 举报
回复
熟练应用scanf,和printf一族的函数
格式输入输出会比较容易
seahoyel 2005-08-12
  • 打赏
  • 举报
回复

/* 示例
* 数据格式如下
* "integer 100"
*/


fgets(buf, fp);
/* 检查返回值 */

p = strpbrk(buf, ' ');
if(p != NULL) {
*p++ = '\0'; /* 把"integer" 和" 1"分开,p指向" 1"部分*/
}
/* else {} */

strcmp(buf, "integer");
/* 检查返回值 */

sscanf(p, "%d", &data);
/* 检查返回值 */
/* 检查data的值 */
trackant 2005-08-07
  • 打赏
  • 举报
回复
以fread()读入结构体的话要求点名对应的字符串是等长的吧,这个文件的字符串可是等长的或已经填充空格成等长的了?
jixingzhong 2005-08-07
  • 打赏
  • 举报
回复
定义结构体 S ;


和你的文件结构匹配!


然后 :

fread(buffer,sizeof(S),1,fp);

buffer //你定义的一个换存空间






int fread(void *ptr,int size,int nitems,FILE *stream)

从流stream中读入nitems个长度为size的字符串存入ptr中
doway 2005-08-06
  • 打赏
  • 举报
回复
有点难,C++ 我不熟。JAVA 和 C# 的你要不要?

lixilin 2005-08-06
  • 打赏
  • 举报
回复
能否给个示例
doway 2005-08-06
  • 打赏
  • 举报
回复
先读到字节数组里,然后做转换,通常都是这么做的。

69,371

社区成员

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

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