Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 什么是像fast这样的数据协议的快速解码方法?在fast中,数据以字节编码,位作为存在标志?_C++_C_Bit Manipulation_Binary Data_Fast Protocol - Fatal编程技术网

C++ 什么是像fast这样的数据协议的快速解码方法?在fast中,数据以字节编码,位作为存在标志?

C++ 什么是像fast这样的数据协议的快速解码方法?在fast中,数据以字节编码,位作为存在标志?,c++,c,bit-manipulation,binary-data,fast-protocol,C++,C,Bit Manipulation,Binary Data,Fast Protocol,像FAST这样的数据编码协议在最小化需要发送的数据量方面非常聪明。从本质上讲,一个字节会得到一个char*,将前两个字节读作整数会给你一个id号,它会告诉你如何解码其余的字节(即,它告诉你剩余的字节分别是一个int、一个字符串、一个无符号int、另一个无符号int、一个嵌套消息等),然后下两个字节会告诉你(在每个位中)后续字段是否存在。每个字节中保留第8位以表示数据之间的边界 如果没有位运算(AND、OR、移位、位检查)的线性遍历,解码这样的协议似乎是不可能的…有什么方法可以更快地执行此操作吗?

像FAST这样的数据编码协议在最小化需要发送的数据量方面非常聪明。从本质上讲,一个字节会得到一个char*,将前两个字节读作整数会给你一个id号,它会告诉你如何解码其余的字节(即,它告诉你剩余的字节分别是一个int、一个字符串、一个无符号int、另一个无符号int、一个嵌套消息等),然后下两个字节会告诉你(在每个位中)后续字段是否存在。每个字节中保留第8位以表示数据之间的边界


如果没有位运算(AND、OR、移位、位检查)的线性遍历,解码这样的协议似乎是不可能的…有什么方法可以更快地执行此操作吗?

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

据我所知,有三种方法:

  • 只需按照下面描述的操作即可
  • 使用底层框架,例如具有
  • 尝试使用就绪库:例如:一个用于本地C++和.NET ./LI>的快速协议的实现
解码这样一个协议似乎不可能没有一个线性 位操作的遍历(AND、OR、移位、位检查)…是否有 如何更快地做到这一点

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

看一看来自的FAST支持。它有一个从exchange XML模板文件生成的快速解码器的Java代码示例


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

是什么让你认为简单的按位运算应用程序不够快?这些操作通常都非常快。这引起了我的注意,但你没有提供参考…这是正确的吗?en.wikipedia.org/wiki/fast\u protocol你不这么认为吗hink Boost::Spirit二进制解析器将比在++-ing指针时进行强制转换、移位和ORing更快?显然不是。更确切地说,Spirit:Qi(解析器,二进制解析器)基于EBNF语法,这确实意味着严格的解析,并且非常耗时(至少在编译时).但是使用二进制解析器可以帮助您减少写入代码的数量。