2

我正在尝试在 D 中编写基本编码规则编解码器,并且我希望能够使用不定长度编码对数据进行编码,其中长度字节设置为0x80,值字节的结尾用双空0x00 0x00(结束内容)。但是,有时双空值是被编码的实际值的一部分。例如,如果您有一个OCTET STRING,则两个相邻的字节可能是0x00 0x00,这将被解释为END OF CONTENT编码值的一部分,而不仅仅是编码值的一部分,从而导致编码值被截断(最佳情况)。有没有办法对双空值进行编码而不将它们解释为END OF CONTENT?或者您是否希望只对没有双空值的值进行编码?我还没有在任何规范中找到任何关于此的内容。

4

1 回答 1

3

您永远不会将普通的 OCTET STRING 内容放在 0x80 和 0x00 0x00 之间。相反,您将 [可能的片段] 定长编码的 OCTET STRING 放在那里。

换句话说,不定长编码的单字节分块“AB”ASCII 字符串(例如,十六进制的 0x41 0x42)看起来像这样:

0x24 0x80      0x04 0x01 0x41       0x04 0x1 0x42     0x00 0x00 
^              ^                    ^                 ^
outer header   inner chunk #1       inner chunk #2    outer EOO sentinel

最终结果是解码器不必扫描实际有效负载来搜索 EOO 标记,因为有效负载边距由确定长度的编码片段明确定义。

于 2017-10-12T18:05:36.193 回答