c语言 bin文件解析_如何在C中解析文件

本文详细介绍了如何使用C语言解析文件,特别是bin文件,讲解了词法分析的基本概念,强调了缓冲和stdio库在处理文件I/O时的作用。通过示例代码,解释了如何读取、处理二进制数据,以及如何处理不同字节序问题,同时也提醒了在使用scanf等函数时的安全注意事项。
摘要由CSDN通过智能技术生成

c语言 bin文件解析

假设条件

我假设您知道或能够查找我在此处描述的功能,并对C编程有一定的了解。

费耶

尽管我将本文称为“如何使用C ++解析文件”,但实际上我们主要是对文件进行词法化,即将流分解为其组成部分,而忽略流包含的语法。 解析实际上包括语法以使其有意义。

认为词汇化是一堆单词中的阅读,而解析则是一句话中的阅读。 每个单词都具有某种含义,但是如果没有句子的上下文,就意味着没有任何非常有用的含义。

我没有使用“如何在C ++中进行词法分析”这一标题,因为你们中的大多数人可能都不知道这意味着什么。 如果您这样做,那么我深表歉意。

介绍

如何解析文件的问题在TSDN上经常出现,所以我决定就该主题编写一些东西,以帮助每个人,而不必一遍又一遍地重复自己。 在使用这些C函数时,我也会解决安全问题,因为如果滥用它们,可能会造成危险。

我将首先定义一些术语,以使您对背景有所了解。

流和文件

对于那些不熟悉C的人,我现在要声明它可以将许多东西视为一个文件,包括键盘(又名终端输入或标准输入)和显示(终端输出或标准输出)。 还有第三个输出,称为标准错误,用于输出错误消息,默认情况下输出到终端(本段是您最后一次在本文中直接讨论标准错误)。 这三个是通过对象stdin,stdout和stderr访问的。

这三个文件(或流)在C标准委员会定义的任何终端应用程序启动时打开,并且可以执行常规文件可以执行的任何操作,除了在文件中查找任意位置。 因此,IO例程通常应用于流而不是文件(文件是流的专业化或更具体的示例)。

要理解这一点,请考虑一下水槽水龙头流出的水(即一股水)。 用手指伸入其中。 考虑到您的手指正在“读取”流过它的所有水分子。 但是,一旦过去,您将无法在流中移动手指并重新阅读刚刚阅读的内容。 那些水分子已经流到了您无法企及的范围。 您也不能将手指向后移过水龙头的嘴,您必须耐心等待“数据”到来。

文件实际上是更专业的。 它允许您在文件中四处寻找,这意味着您可以指向文件中的任何位置以从中读取或写入文件。 这样的文件称为随机访问文件,因为您可以按任意顺序读取它。

缓冲和双缓冲

双缓冲意味着在处理/显示之前从一个缓冲区转储到另一个缓冲区。

缓冲功能

stdio.h具有几个以f开头的文件功能。 fopen(),fread(),fwrite(),fflush(),fscanf(),fprintf(),fgetc(),fputc(),fseek()和fclose()

[*] 。 所有这些功能都被缓冲,这意味着如果您要读取一个字节然后读取第二个字节,则只会发生一次磁盘读取。

使用这些功能需要使用FILE。 FILE是一个结构,其中包含执行所需操作所需的所有“材料”。

发生这种情况是因为在第一次读取时,不仅读取了一个字节,而且读取了一大块数据并将其存储在缓冲区中。 该缓冲区位于由stdio库分配的内存中的某个位置。 然后它将数据复制到您指定的数据空间。 当请求下一个字节时,stdio库不必从驱动器请求数据,因为它已经获取了一大块数据。 这样可以大大加快阅读速度。

写作是相似的。 除非您填满缓冲区,否则显式刷新缓冲区,或者对于文本文件,除非输出'\ n'字符,否则数据将不会发送到文件。

当读取字节或数据字符串时&#x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值