yuxuangaopeng 发表于 2021-11-8 14:29

求大神帮忙解决二进制文件读取数据不对的问题

最近在练习二进制文件的读写操作,但是在练习过程中出现了一些困惑,比如我在读取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了

ryosga 发表于 2021-11-8 14:29

你读的其实没有问题, 只是他按浮点型显示, 你按整型显示, 实际内容都是一样的

woflant 发表于 2021-11-8 15:42

读出来是一样的结果,估计是文件整错了

#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:51

本帖最后由 yuxuangaopeng 于 2021-11-10 21:57 编辑

woflant 发表于 2021-11-8 15:42
读出来是一样的结果,估计是文件整错了

#include

文件没有整错,我问过那个大神朋友,他是用PyThon语言解析的,他只是简单截屏了部分代码给我,我仔细看了一下代码没啥出奇之处,但是就是解出来了,我很郁闷,我见他用的数据类型也是int类型!

yuxuangaopeng 发表于 2021-11-12 16:58

woflant 发表于 2021-11-8 15:42
读出来是一样的结果,估计是文件整错了

#include


谢谢这位仁兄,我原本想的是如果没人解答,悬赏就给你了,祝你开心

yuxuangaopeng 发表于 2021-11-12 16:59

ryosga 发表于 2021-11-8 14:29
你读的其实没有问题, 只是他按浮点型显示, 你按整型显示, 实际内容都是一样的

谢谢大神,帮我解决了一半问题,但是我用强转结果还是一样,有没有其它比较好的解决办法,请教您一下。

ryosga 发表于 2021-11-12 21:36

只读取了第一行

#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:14

本帖最后由 yuxuangaopeng 于 2021-11-13 10:17 编辑

ryosga 发表于 2021-11-12 21:36
只读取了第一行

#include

非常非常感谢!代码质量度蛮高的。
页: [1]
查看完整版本: 求大神帮忙解决二进制文件读取数据不对的问题