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