我正在尝试在D中编写基本编码规则编解码器,我希望能够使用不定长度编码对数据进行编码,其中长度字节设置为0x80
并且值字节结束用双空0x00 0x00
(内容结束)划分。但是,有时候double null是要编码的实际值的一部分。例如,如果您有OCTET STRING
,则两个相邻的字节可以是0x00 0x00
,这将被解释为END OF CONTENT
而不是仅仅是编码值的一部分,从而导致截断编码值(最佳情况)。有没有办法编码双重空值而不将它们解释为END OF CONTENT
?或者您是否只希望编码不具有双重空值的值?我还没有在任何规范中找到任何相关内容。
答案 0 :(得分: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标记的实际有效载荷,因为有效载荷余量由定长编码片段明确定义。