c语言 bin文件解析
假设条件我假设您知道或能够查找我在此处描述的功能,并对C ++编程有一定的了解。
费耶尽管我将本文称为“如何使用C ++解析文件”,但实际上我们主要是对文件进行词法化,即将流分解为其组成部分,而忽略流包含的语法。 解析实际上包括语法以使其有意义。
认为词汇化是一堆单词中的阅读,而解析则是一句话中的阅读。 每个单词都具有某种含义,但是如果没有句子的上下文,就意味着没有任何非常有用的含义。
我没有使用“如何在C ++中进行词法分析”这一标题,因为你们中的大多数人可能都不知道这意味着什么。 如果您这样做,那么我深表歉意。
介绍嗨,上次我向大家展示了如何使用C解析文件。在本文中,我现在将介绍如何使用C ++解析文件。
对于那些尚未阅读该文章的人,请在
流和文件 ,因为C ++和C ++相同。但是,使用C ++流时,分别使用cin,cout和cerr而不是stdin,stdout和stderr。 缓冲和双缓冲双缓冲意味着在处理/显示之前从一个缓冲区转储到另一个缓冲区。 在C ++中,所有流库都被缓冲。
解析文件使用描述的缓冲技术可以非常简单地完成文件的解析。
没有双缓冲的解析在没有双重缓冲的情况下解析文件并非总是可能的。 唯一的方法是只读取和存储数字。
例如,这是一个示例文件:
1, 2, 3, 4, 5
6, 7, 8, 9, 10
要在没有双重缓冲的情况下读入,可以循环以下操作:
// CODE FRAGMENT 1
int itemsParsed = 0;
int items[5];
for (itemsParsed = 0; itemsParsed < 5 && cin.good(); ++itemsParsed) {
cin >> items[itemsParsed];
if (itemsParsed != 4 && cin.peek() == ’,’) {
cin.ignore(1); // clear out comma
}
}
if (!cin.good()) {
--itemsParsed;
// check what flag was set and act appropriately
//...
if (!cin.eof()) {
cin.clear(); // Clear the error flag (unless it is eof)
}
}
请注意,每个数字后的输入流中都必须包含逗号。 逗号后可以有0个或多个空格。 空格可以是常规空格,制表符,垂直制表符(很少使用),回车符或换行符。
代码片段1a有点简单,因为它使用C ++异常处理将正常的代码流与例外的代码流分开。
// CODE FRAGMENT 1A
int itemsParsed = 0;
int items[5];
cin.exceptions(~ios::goodbit); // turn on exceptions
try {
for (itemsParsed =