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