我有一个协议,其在线格式已经定义,我想使用 ASN.1 对其进行编码/解码,但它似乎破坏了定义的 BER/DER/PER 选项。无论出于何种原因,协议开发人员都没有将有效负载大小/长度放在有效负载本身之前 - 所以我不能使用自动 BER/DER。但是由于有效载荷可以是可变长度的,所以我也不能使用 PER。这是一个例子:
12'b 12'b 4'b 4'b
|------------|--------------|-------|------|
| some stuff | payload size | blah2 | blah | Header
|------------------------------------------|
| payload word 1 |
|------------------------------------------|
| ... | Payload
|------------------------------------------|
| payload word N |
|------------------------------------------|
| much stuff | many bits | such doge | wow | Trailer
|------------------------------------------|
所以这里可能有两个问题:
- 有没有办法使用 ASN.1 编码之一来指定某些字段作为后面字段的长度 - 所以你可以说位 9-20 包含位 33-N*32 的长度,但你正在跳过位 21-32 可以包含其他不相关的垃圾?
- 我可以看到如何编写算法/规则来支持上述内容,所以如果目前没有办法用 ASN.1 做到这一点,是否有办法(和文档)来编写新规则或扩展某种对现有编码的影响?
编辑
为了澄清我为什么要提出 ASN.1,而不重复前面的问题,是因为它几乎正是我正在寻找的 - 只是显然没有办法处理我在这里询问的特定用例。我需要反序列化现有的二进制协议,而且我不想自己编写,因为已经有很多工具声称他们可以做到这一点。如果有人有其他建议,我很乐意尝试。