求大神帮忙解决二进制文件读取数据不对的问题
最近在练习二进制文件的读写操作,但是在练习过程中出现了一些困惑,比如我在读取19.day文件时()见附件,解出来的数据与实际数据不一样我写的代码如下
void main()
{
void *p = malloc(4000);
printf("%p\n", p);
FILE *pf = fopen("C:\\Users\\peng\\Desktop\\SH\\19.day", "rb");
int num =fread(p, 4, 1000, pf);
printf("fread return=%d", num);
fclose(pf);
system("pause");
}
原来的文件全称为19.day,但是.day传不了附件,所以就改为.txt了 你读的其实没有问题, 只是他按浮点型显示, 你按整型显示, 实际内容都是一样的 读出来是一样的结果,估计是文件整错了
#include <iostream>
typedef struct _TestStruct
{
int num1;
int num2;
int num3;
int num4;
int num5;
int num6;
int num7;
int num8;
void showInfo()
{
printf("%10d\t%8d\t%8d\t%8d\t%8d\t%12d\t%8d\t%8d\n",num1,num2,num3,num4,num5,num6,num7,num8);
}
}TestStruct,*PTestStruct;
int main()
{
FILE* fs;
fopen_s(&fs,"C:\\Users\\LENOVO-DESKTOP\\Desktop\\19.txt","rb");
if (fs==NULL)
{
printf("文件打开失败!");
system("pause");
return 0;
}
PTestStruct pts=(PTestStruct)malloc(sizeof(TestStruct));
for (int i=0;i<1000;i++)
{
fread(pts,sizeof(TestStruct),1,fs);
pts->showInfo();
}
if (pts!=NULL)
{
free(pts);
}
fclose(fs);
system("pause");
return 0;
}
本帖最后由 yuxuangaopeng 于 2021-11-10 21:57 编辑
woflant 发表于 2021-11-8 15:42
读出来是一样的结果,估计是文件整错了
#include
文件没有整错,我问过那个大神朋友,他是用PyThon语言解析的,他只是简单截屏了部分代码给我,我仔细看了一下代码没啥出奇之处,但是就是解出来了,我很郁闷,我见他用的数据类型也是int类型! woflant 发表于 2021-11-8 15:42
读出来是一样的结果,估计是文件整错了
#include
谢谢这位仁兄,我原本想的是如果没人解答,悬赏就给你了,祝你开心 ryosga 发表于 2021-11-8 14:29
你读的其实没有问题, 只是他按浮点型显示, 你按整型显示, 实际内容都是一样的
谢谢大神,帮我解决了一半问题,但是我用强转结果还是一样,有没有其它比较好的解决办法,请教您一下。 只读取了第一行
#include <cstdio>
struct Data
{
int v1;
int v2;
int v3;
int v4;
int v5;
float v6;
int v7;
int v8;
};
int main()
{
FILE* fp = fopen("d:\\19.txt", "rb");
if (fp)
{
Data data = { 0 };
fread(&data, sizeof(data), 1, fp);
printf("%d, %.2f, %.2f, %.2f, %.2f, %.2f, %d, %d",
data.v1,
data.v2 / 100.f,
data.v3 / 100.f,
data.v4 / 100.f,
data.v5 / 100.f,
data.v6,
data.v7,
data.v8);
}
getchar();
return 0;
} 本帖最后由 yuxuangaopeng 于 2021-11-13 10:17 编辑
ryosga 发表于 2021-11-12 21:36
只读取了第一行
#include
非常非常感谢!代码质量度蛮高的。
页:
[1]