我正在为以串行数据包形式通信的串行设备编写驱动程序。我还希望用户能够解读来自串行流量转储文件的数据包。我计划将来写其他类似的驱动程序。
在查看可用的库和标准之后,我考虑实现std :: codecvt,它被iostream用来转换为宽字符,以提供一种在字节流和数据包对象流之间进行转换的方法和处理asio,使串口可能是标准的字节流。
对我而言,这似乎是最优雅的方法,它最大限度地利用了标准,但我担心这是对codecvt的误用。阅读codecvt的文档显然只是为了转换字符编码。但似乎它可以与更高级别的数据包对象一起使用。
使用熟悉的插入和提取操作符来处理更高级别的数据是很诱人的,而这种方法意味着需要最少的样板代码来实现它。
这个想法是否误用了codecvt?什么是"正确"或者"最好的"在你经验丰富的意见中解决这个问题?
答案 0 :(得分:0)
我们将Asio和Boost.Spirit配对,将字节流转换为数据类型和数据类型为字节流。
我们经常使用它,因此我们将概念抽象为一个通用的打包器库,它可以采用Qi / Karma语法和可以与async_read_some
一起使用的Asio类型。
我们将其用于串行端口,TCP / IP套接字和自定义IO。