fscanf和以原生int格式存储在文件中的数字的问题,而不是文本

时间:2014-01-29 12:41:30

标签: c

HEX 78000000 0300497B ..............

中文件开头的数据

等同于int32 120和char 03,然后加载其他char数据,

我的另一个程序写的数据,并以十六进制转储模式查看。

当我尝试用另一个程序读回来时,我试过了..

int j,padNumber;
char rot;

j=fscanf(fp,"%d%c",&padNumber,&rot);  // insists on returning j=0,padNumber=0 & rot=0

,而

char c1,c2,c3,c4,rot;

j=fscanf(fp,"&c&c&c&c&c",&c1,%c2,&c3,&c4,&rot);// gives 

j=5,c1='x',c2='\0',c3='\0',c4='\0',rot='!x03'

等同于我的文件数据。

为什么我不能以原生格式恢复我的int

1 个答案:

答案 0 :(得分:3)

从本机二进制转储读取时使用fread

fread(&padNumber, sizeof padNumber, 1, fp);
fread(&rot, sizeof rot, 1, fp);

或者如果您使用的是Unix平台,直接read系统调用也可以正常工作。

#include <unistd.h>
...
read(fd, &padNumber, sizeof padNumber);
read(fd, &rot, sizeof rot);