解码像FAST这样的数据协议的快速方法是什么,其中数据以字节为单位进行编码,并将位作为存在标志?

时间:2012-06-09 04:41:20

标签: c++ c bit-manipulation binary-data fast-protocol

像FAST这样的用于编码数据的协议非常聪明,可以最大限度地减少需要发送的数据量。基本上一个得到一个char *,读取前几个字节作为一个整数给你一个id号,指向你如何解码其余的指令(即它告诉你其余的字节,例如,respectivley一个int,一个字符串,一个unsigned int,另一个unsigned int,一个嵌套的消息等。)接下来的几个字节告诉你(在每一位)后续字段是否存在。保留每个字节中的第8位以表示数据之间的边界。

如果没有位操作的线性遍历(并且,ors,移位,位检查),解码这样的协议似乎是不可能的......有没有办法更快地做到这一点?

2 个答案:

答案 0 :(得分:2)

我认为你找不到比刚刚描述的更快的技术或方法。这些协议旨在按顺序解析它们。继续搜索的唯一原因是找到一种更方便的数据处理方式。

据我所知,有三种方法:

  • 按照下面的说明进行操作
  • 使用Boost::Spirit等具有binary parsers
  • 的低级框架
  • 尝试使用现成的库:例如QuickFAST - 用于本机C ++和.NET的FAST协议的实现。

答案 1 :(得分:1)

  

如果没有线性,解码这样的协议似乎是不可能的   位操作的遍历(ands,ors,shift,bit checks)......有没有   这样做的方法更快?

FAST协议使用停止位方法对值进行编码,换句话说,它按顺序逐字节解析,直到它遇到第8位设置为1的字节。在每个字节中丢失一点,但总体而言它是一种快速编码许多不同字段的方法,而不需要在它们之间使用分隔符字节。

on this article查看有关FAST支持的CoralFIX。它具有从交换XML模板文件生成的FAST解码器的Java代码示例。

免责声明:我是CoralFIX的开发者之一。