| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 10279 人关注过本帖
标题:如何读取二进制文件?
只看楼主 加入收藏
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你不是要我给完整代码吧?

授人以渔,不授人以鱼。
2012-09-08 13:14
youlanxiao
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2012-9-8
收藏
得分:0 
回复 21楼 TonyDeng
不是的。。。只是真的完全不会。。。那个结构体也才早上看了一点点。。。把这个_data x;放在定义的结构体之后也还是出现错误。不知道该怎么办
2012-09-08 13:17
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
我知道了,他写这个二进制文件的时候不是用fwrite()那个结构体出去的,不能用结构体读。

授人以渔,不授人以鱼。
2012-09-08 13:29
youlanxiao
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2012-9-8
收藏
得分:0 
回复 23楼 TonyDeng
哦~~~我再试试。谢谢。。。
2012-09-08 13:32
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
程序代码:
#include <stdio.h>
#include <conio.h>

void main(void)
{
    FILE* file;
    char a;
    int b;

    file = fopen("Encode1.da", "rb");
    if (file == NULL)
    {
        return;
    }
    while (!feof(file))
    {
        fread(&a, sizeof(a), 1, file);
        fread(&b, sizeof(b), 1, file);
        printf_s("%c,%d\n", a, b);
    }
    fclose(file);
    _getch();
}

授人以渔,不授人以鱼。
2012-09-08 13:36
youlanxiao
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2012-9-8
收藏
得分:0 
回复 25楼 TonyDeng
虽然最后让大神帮我做了。。。有点不好意思。。。但是真的做出来了。。。非常谢谢。。。
2012-09-08 13:58
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:20 
主要是迫使你逐个读。二进制格式的文件,读和写都要密切配合才行,不知道当时怎么写下去的,很容易失败,这个不奇怪。

授人以渔,不授人以鱼。
2012-09-08 14:02
youlanxiao
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2012-9-8
收藏
得分:0 
回复 27楼 TonyDeng
嗯嗯,说的事呢!我们老师真真是变态极了。。。才上了一节c++就出了个变态题目,还让我们用c写。。。。
不过,谢谢啦~~~今天总算不用转点睡觉了。。。好开心。。。真的很感谢~~~
2012-09-08 14:46
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
他给了你们两天时间做吧?应该够时间看书摸索的,这个题目其实不错。

之前错的原因,第一个你犯的错误,你已经知道了。第二个我犯的错误,是忘了结构体的字对齐,因为_data的尺寸实际上不是5byte,而文件储存的数据尺寸却正好是5byte。这个教训告诉我们,二进制格式文件的可移植性其实不好(但如果当时写入这个数据文件的时候是用_data通过fwrite()写出去的,就没有问题)。第三个问题,是我上面提到过的,int这个数据类型,在不同的机器和编译器中,是可能有不同的尺寸的,有的定义int是16位二进制整数,有的却是32位,那么尽管你在源代码中写了int的数据类型,实际上并不知道它到底是不是与文件中的int一致,那样也同样会犯错误。

[ 本帖最后由 TonyDeng 于 2012-9-8 15:00 编辑 ]

授人以渔,不授人以鱼。
2012-09-08 14:54
d525743438
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2017-11-12
收藏
得分:0 
回复 29楼 TonyDeng
同样的老师出了同样的题,居然让我找到了这里··虽然过去很多年 但十分感谢你的回答!
2017-11-12 20:38
快速回复:如何读取二进制文件?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018516 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved