我有一个小问题,不知道如何解决它,因为我对 C++ 不太擅长。:-(
我有一个二进制文件,我想将以下内容提取为 txt 文件。请注意第二个链接中的第 49 行,该行多次显示 1337(这应该是一些分隔符)。我写了一个bashscript来解决这个任务,但我也想用 C++ 来做。
欢迎提出想法和建议!如果您不明白我想知道的内容,请告诉我,以便我更详细地解释我的问题。谢谢您的帮助!
我有一个小问题,不知道如何解决它,因为我对 C++ 不太擅长。:-(
我有一个二进制文件,我想将以下内容提取为 txt 文件。请注意第二个链接中的第 49 行,该行多次显示 1337(这应该是一些分隔符)。我写了一个bashscript来解决这个任务,但我也想用 C++ 来做。
欢迎提出想法和建议!如果您不明白我想知道的内容,请告诉我,以便我更详细地解释我的问题。谢谢您的帮助!
好的,我知道这是旧线程,但不久前我遇到了同样的问题,所以我想贡献一下。
根据我的经验,使用 std::regex 解析二进制文件的最简单方法是使用sregex_iterator。但请记住,您将需要一个完全实现 c++11(或至少是正则表达式库)的编译器。我正在使用 GCC 4.9,它适用于正则表达式(我相信 Clang 也适用)。
您的问题没有具体内容,所以现在我只为您提供一些参考资料。首先是 C++ 正则表达式库,它是 C++11 中的新功能。
http://www.cplusplus.com/reference/regex/
第二个也是我首选的解决方案是 boost 正则表达式库。boost 库非常可靠(大部分),我建议在尽可能多的情况下利用它们,有时甚至在某些 STL 容器上使用它们,但如果性能是一个问题,请在这样做之前进行研究。某些增强扩展容器在某些情况下是不稳定的。下面是 boost 正则表达式库文档的链接。
http://www.boost.org/doc/libs/1_53_0/libs/regex/doc/html/index.html
我推荐 boost 的原因是 A:它不依赖于 C++11 支持(现在相当标准,但绝不是通用的)和 B:boost 正则表达式库已经存在了一段时间。它非常坚固。
编辑:如何使用 boost 正则表达式库
#include <boost/regex.hpp>
#include <iostream>
#include <string>
using namespace std;
using namespace boost;
int main() {
regex re("a.*");
string passString = "asdasdfdasdfa";
string failString = "babbddssddf";
cmatch matches; //What this variable does is usually unimportant, read the documentation if you care to know.
cout << passString << " " << regex_match(passString.c_str(), matches, re) << endl;
cout << failString << " " << regex_match(failString.c_str(), matches, re) << endl;
}
预期输出:
asdasdfdasdfa 1
babbddssddf 0
在我的机器上使用以下命令构建:
g++ some.cpp -I/opt/local/include -L/opt/local/lib -lboost_regex-mt -o some
此命令将取决于您如何配置 boost 安装。还有关于为全局匹配进行 regex_search 的详尽文档,在文档页面上,这只是为了让您入门。