繁体   English   中英

如何使用fscanf解析二进制文件

[英]How to use fscanf to parse a binary file

我正在尝试使用fscanf解析二进制文件(图像)。

这是文件的开头。 我想获取文件的“宽度”和“高度”。 在这种情况下,宽度为640,高度为480

00000000: 5036 0a23 2043 7265 6174 6564 2062 7920  P6.# Created by 
00000010: 4972 6661 6e56 6965 770a 3634 3020 3438  IrfanView.640 48
00000020: 300a 3235 350a a079 35a0 7833 a179 349f  0.255..y5.x3.y4.

因此标题是“ P”,某些字符后跟0xa(换行符),然后是宽度,然后是空格(0x20),然后是高度”

在我的代码中,我有

  t=fscanf(fin,"P%c\r%d %d",&fc,&w, &h);
  or 
  t=fscanf(fin,"P%c\n%d %d",&fc,&w, &h);

但是t总是返回1(而不是3),并且不会读取我的w和h。

您能告诉我如何解决我的问题吗?

您需要跳过文本“#Created by ... \\ n”。 因此,请尝试:

t=fscanf(fin,"P%c\n%*[^\n] %d %d", &fc, &w, &h);

您可以通过简单地读取掉前26个字符,然后将宽度和高度保存在整数变量中来实现此目的

char fc[26];
val=fscanf(fp,"%26c %d %d",fc,&w,&h );

“ 26”是宽度,它指定当前操作中要读取的最大字符数。 因此,这将读取掉头26个字符,无论它们是什么,并为您节省阅读宽度和高度的麻烦,而这实际上是您想要的。

使用“ fc”作为字符串时要小心。 最后没有添加“ NULL”字符。 “ fc”只是一个字符数组,并且不以NULL终止。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM