使用 boost Spirit 解析带有二进制信封的文本文件

2024-03-10

我目前正在尝试为 ASCII 文本文件编写一个解析器,该文件被一个带有校验和的小信封包围。

该文件的基本结构是:

我想将有效负载提取到另一个字符串中以将其提供给 下一个解析器。

我用来解析这个信封的解析器表达式是:

qi::phrase_parse(
    first, last,
    char_('\x02') >> *print >> char_('\x02') >> *xdigit,
    space
);

输入已被消耗......并且我已经尝试转储有效负载:

qi::phrase_parse(
    first, last,
    char_('\x02') >> *print[cout << _1] >> char_('\x02') >> *xdigit,
    space
);

但问题是每个换行符、空格等都被省略了!

现在我的问题是:

  1. 如何提取 0x02/0x03 (ETX/STX) 字节之间的内容 正确地不省略空格、换行符等。

  2. 我的方法是先去掉信封,然后解析 有效负载好还是我应该使用其他更好的方法?


使用例如qi::seek/qi::confix 让您开始(存储库的两个部分http://www.boost.org/doc/libs/1_57_0/libs/spirit/repository/doc/html/spirit_repository/qi_components/directives/confix.html http://www.boost.org/doc/libs/1_57_0/libs/spirit/repository/doc/html/spirit_repository/qi_components/directives/confix.html).

但问题是每个换行符、空格等都被省略了!

嗯,那就是船长做什么 https://stackoverflow.com/questions/17072987/boost-spirit-skipper-issues/17073965#17073965。不要使用其中一个,或者:

Use qi::raw[]

要提取中间文本,我建议使用qi::raw。尽管我不确定您是否真的想将其复制到字符串(复制听起来很昂贵)。当源是流(或输入迭代器的其他源)时,您可能可以执行此操作。

开创性规则:

myrule = '\x02' > raw [ *(char_ - '\x03') ] > '\x03';

您可以添加校验和:

myrule = '\x02' > raw [ *(char_ - '\x03') ] [ _a = _checksum(_1) ] > '\x03' >> qi::word(_a);

Assuming

  • qi::locals<uint16_t>
  • _checksum是一个合适的 Phoenix 函子,它接受一对源迭代器并返回uint16_t

当然,您可能更愿意在解析器之外保留校验和。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 boost Spirit 解析带有二进制信封的文本文件 的相关文章

  • 在 C/C++ 中获得正模数的最快方法

    通常在我的内部循环中 我需要以 环绕 方式索引数组 因此 例如 如果数组大小为 100 并且我的代码要求元素 2 则应该给它元素 98 高级语言 例如 Python 可以简单地使用my array index array size 但由于某
  • QCombobox 向下箭头图像

    如何更改Qcombobox向下箭头图像 现在我正在使用这个 QSS 代码 但这不起作用 我无法删除向下箭头边框 QComboBox border 0px QComboBox down arrow border 0px background
  • 我如何理解这个 C 类型声明?

    double bar int double double double double 在查看讲座幻灯片时 我发现了留给学生的练习 用简单的英语来说 什么是类型bar在这个 C 声明中 Please帮助我解决这个问题 我什至不知道从哪里开始
  • 何时使用 =default 使析构函数默认?

    尽管对构造函数使用 default 对我来说很清楚 即强制编译器在其他构造函数存在时创建默认构造函数 但我仍然无法理解这两种类型的析构函数之间的区别 那些使用 default 的 那些没有显式定义并由编译器自动生成的 我唯一想到的是 gro
  • 使用 Enumerable.OfType() 或 LINQ 查找特定类型的所有子控件

    Existed MyControl1 Controls OfType
  • 为什么在创建矩阵类时使用向量不好?

    对于我的矩阵类 我做了 template
  • 将人类日期(当地时间 GMT)转​​换为日期

    我正在服务器上工作 服务器正在向我发送 GMT 本地日期的日期 例如Fri Jun 22 09 29 29 NPT 2018在字符串格式上 我将其转换为日期 如下所示 SimpleDateFormat simpleDateFormat ne
  • 平滑滚动.net 表单

    您好 我正在 net 中使用表单 并且在运行时动态添加大量链接标签 我将这些链接标签添加到面板并将该面板添加到 winform 当链接标签的数量增加时 表单会显示一个自动滚动条 垂直 现在 当我使用自动滚动向下滚动时 表单在滚动时不会更新其
  • EF Core 通过完全替换断开集合导航属性的更新

    使用 EF Core 5 0 我有一个 SPA 页面 可以加载Group实体及其集合Employee来自 API 的实体 var groupToUpdate await context Groups Include g gt g Emplo
  • 如何在 SqlDataReader.Read() 期间从死锁异常中恢复

    我的 NET 应用程序的事件日志显示 它在从 Sql Server 读取数据时偶尔会出现死锁 这种情况通常非常罕见 因为我们已经优化了查询以避免死锁 但有时仍然会发生 过去 我们在调用ExecuteReader函数在我们的SqlComman
  • 找不到 assimp-vc140-mt.dll ASSIMP

    我已经从以下位置下载了 Assimp 项目http assimp sourceforge net main downloads html http assimp sourceforge net main downloads html Ass
  • 将二进制数据从 C# 上传到 PHP

    我想将文件从 Windows C 应用程序上传到运行 PHP 的 Web 服务器 我知道 WebClient UploadFile 方法 但我希望能够分块上传文件 以便我可以监控进度并能够暂停 恢复 因此 我正在读取文件的一部分并使用 We
  • 给出 5 个参数,但在终端中只得到 3 个参数

    我想将一个文件传递给一个c 程序 如果我在 IDE 中执行此操作 test string string lt test txt return argc 5 但在终端上我刚刚得到argc 3 看来 这是因为 什么是 lt 意思是 我正在使用
  • 无法在内存位置找到异常源:cudaError_enum

    我正在尝试确定 Microsoft C 异常的来源 test fft exe 中 0x770ab9bc 处的第一次机会异常 Microsoft C 异常 内存位置 0x016cf234 处的 cudaError enum 我的构建环境是 I
  • 我可以让 ungetc 取消阻止阻塞的 fgetc 调用吗?

    我想在收到 SIGUSR1 后使用 ungetc 将 A 字符重新填充到标准输入中 想象一下我有充分的理由这样做 调用 foo 时 stdin 中的阻塞读取不会被收到信号时的 ungetc 调用中断 虽然我没想到它会按原样工作 但我想知道是
  • C++ Streambuf 方法可以抛出异常吗?

    我正在尝试找到一种方法来获取读取或写入流的字符数 即使存在错误并且读 写结束时间较短 该方法也是可靠的 我正在做这样的事情 return stream rdbuf gt sputn buffer buffer size 但如果streamb
  • 将 char[][] 转换为 char** 会导致段错误吗?

    好吧 我的 C 有点生疏了 但我想我应该用 C 来做我的下一个 小 项目 这样我就可以对其进行抛光 并且我已经有不到 20 行的段错误了 这是我的完整代码 define ROWS 4 define COLS 4 char main map
  • ASP.NET Core MVC 视图组件搜索路径

    在此处的文档中 https learn microsoft com en us aspnet core mvc views view components view aspnetcore 2 2 https learn microsoft
  • xsi:type 属性搞乱了 C# XML 反序列化

    我使用 XSD exe 根据 XML 架构 xsd 文件 自动生成 C 对象 我正在反序列化 OpenCover 输出 但其中一个部分类未正确生成 这是导致异常的行
  • 从 JavaScript 中的 OnClientClick 事件中阻止 C# 中的 asp:Button OnClick 事件?

    我有一个asp Button在我的网页上 它调用 JavaScript 函数和代码隐藏方法 后者进行调用以导航到另一个页面 在 JavaScript 函数中 我正在检查条件 如果不满足这个条件 我想中止导航 以便OnClick方法未被调用

随机推荐

  • @Value 在单元测试中返回 null

    我有一个带有端点测试配置类和单元测试的 Spring Boot 应用程序来测试我的 http 客户端 我试图从位于我的 src test 中的 application properties 获取我的服务器地址和端口 所有类都在我的 src
  • 如何在action方法中获取匹配的token参数值?

    如果我的语法中有这样的内容 grammar G token tab indent Int level Using just level would require to have the same effect so use a code
  • Jquery 5秒后显示按钮[重复]

    这个问题在这里已经有答案了 所以我得到了这个按钮 我需要在 5 秒后显示它 我没有 jquery 或 javascript 经验 HTML 代码 p You need to wait 0 before you can proceed p
  • 有没有像 Reflector 这样的 COM 库工具?

    有没有像 Reflector 这样的 COM 库工具 我想打开一个 COM 库并浏览类和接口 就像在 Reflector 中一样 如果可能的话 我宁愿不安装 Visual Basic 6 0 来执行此操作 但方式不同 有许多工具可以让您检查
  • 在 Sqlalchemy 中导入 create_engine 时出现循环导入错误

    我正在尝试使用 Python 进行 CS50 Web 开发课程 在 sql 部分中 在从 sqlalchemy 导入 create engine 时出现此错误 ImportError 无法从部分初始化的模块 sqlalchemy 导入名称
  • PHP 事件监听器最佳实践实现

    我正在尝试用 PHP 创建一个类似 CMS 的系统 使其尽可能模块化和可扩展 有人可以为我提供在 PHP 中创建事件侦听器系统 例如 Drupal 系统的非常简化版本 的最佳实践方案 创建挂钩并在一个简短的示例中实现它们也很好 嗯 从实现的
  • Laravel Eloquent Join 与 Inner Join?

    所以我在弄清楚如何进行 feed 风格的 mysql 调用时遇到了一些麻烦 我不知道这是一个雄辩的问题还是 mysql 的问题 我确信两者都是可能的 我只是需要一些帮助 所以我有一个用户 他们进入他们的提要页面 在此页面上显示来自他们朋友的
  • 选择所有 li,但不选择子项

    我有这个代码 li li this 这是选择所有的li在我的代码中 这很好用 但我想要 li排除li位于子菜单中 ul li a href blah 1 a li ul li a href sub 1 a li li a href sub
  • Ant复制过程中如何删除一个文件夹

    我有一个文件 其文件路径类似于 LibraryX A Stuff FileY txt 我在 Ant 构建中将其用作包含文件 但是 我需要在复制过程中删除路径的 LibraryX A 部分 文件从 LibraryX A Stuff FileY
  • Knex/SQL:将一对多联接合并到一个对象中

    我有两个表 page 和 page css 我想要page和page css之间是一对多的关系 一个页面包含多个page css 参见表结构 Page table structure Page css table structure 这是我
  • 如何将 csv 文件的内容读入类中,并将每个 csv 行作为类实例

    我是一名 Python 新手 几天来我一直在为课堂作业而苦苦挣扎 我有一个 csv 文件 其中包含这样的数据 id latitude longitude city label yr1970 yr1975 yr1980 yr1985 yr19
  • 如何区分真阳性和真阴性?

    本质上 我有一个代表真实情况的二值图像 并且有一个取自算法结果的二值图像 现在的任务是找到重叠区域来评估算法的性能 即找到真正的阳性 TP 真阴性 TN 假阳性 FP 和假阴性 FN 我已经正确找到了 FP 和 FN 的值 但是我无法理解如
  • 如何编写将使用express api的azure函数

    我有一个天蓝色的功能 在index js中我有以下代码 module exports function context req const createHandler require azure function express creat
  • 如何在文件上传时显示加载图形?

    文件应通过 Ajax 或 Iframe 在后台上传 我应该能够通过 JavaScript 检测上传何时完成 这样我就可以隐藏加载图形并将用户重定向到新的 URL 使用Jquery就可以了 查看jQuery 上传 http www uploa
  • Xamarin iOS 本地推送通知

    如何安排本地 无服务器 推送通知 不是警报 从我的应用程序触发 我只想从我的应用程序安排一个通知 并让它在通知中心的给定时间触发 我尝试使用 LocalNotifications 但它们似乎仅在应用程序打开时才起作用 并且仅在应用程序关闭时
  • Twitter Bootstrap Navbar 与 AngularJS - 折叠不起作用

    我正在使用 Angular 和 Twitter Bootstrap 导航栏 并尝试让折叠功能正常工作 部分 program html div class navbar navbar inverse navbar static top div
  • 如何在Androidcamera2 API中同时配置前后两个摄像头?

    我想将前置和后置两个摄像头配置到 Androidcamera2 API 中 以便同时从两个摄像头拍摄照片和视频 我创建了 2 个纹理视图 当我打开一个摄像头 前置或后置 时 我的代码工作正常 但每当我试图同时打开两个摄像头 代码在创建会话时
  • 使用CSS检测输入中是否有文本——在我正在访问且无法控制的页面上?

    有没有办法通过 CSS 检测输入中是否有文本 我尝试过使用 empty伪类 我尝试过使用 value 这两个都不起作用 我似乎无法找到单一的解决方案 我想这一定是可能的 考虑到我们有伪类 checked and indeterminate
  • Xcode 突然停止在硬件上运行项目:“无法启动 xxx.app:.. 没有这样的文件..”[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 Xcode 已停止运行我的应用程序 它在我从设备中删除它并尝试通过在 Xcode 中重新运行它来重新安装后立即启动 我之前已经做过数百
  • 使用 boost Spirit 解析带有二进制信封的文本文件

    我目前正在尝试为 ASCII 文本文件编写一个解析器 该文件被一个带有校验和的小信封包围 该文件的基本结构是 我想将有效负载提取到另一个字符串中以将其提供给 下一个解析器 我用来解析这个信封的解析器表达式是 qi phrase parse