【问题标题】:Can PER (aligned or unaligned) be used to describe encoding/decoding of any arbitrary octet sequence?PER(对齐或未对齐)可以用来描述任意八位字节序列的编码/解码吗?
【发布时间】:2016-04-20 10:10:20
【问题描述】:

我目前正在阅读 ASN.1 的规范和各种编码规则,我知道它们中的大多数都是为了让您首先设计 PDU 语义,然后使用 *ER 对其进行编码以使您的 PDU“可传输”(可通过给定的运输方式交付)

所有编码规则似乎都将类型标记到生成的八位字节序列中,除了 PER。

所以我的问题是:给定现有的 PDU 格式(例如 24 位 Windows BMP 文件),是否可以使用 ASN.1 来描述(键入和命名)字段并使用 PER 从文件?

如果是这样,这种方法的局限性是什么? (像字节序,支持“选择器”字段,...)

【问题讨论】:

    标签: asn.1


    【解决方案1】:

    洛朗。

    有可能吗?这是值得商榷的。明智吗?嗯……正如圣保罗在给哥林多人的信中所说,所有事情都是合法的,但并非所有事情都有帮助。

    通常,很难将现有文件格式硬塞到 PER 中。这并非不可能,但除非文件格式具有固定长度的字段(或大小限制),否则您将遇到困难。

    原因是因为 PER 使用带有前导码的位压缩格式来覆盖可选和默认元素,并在需要时覆盖长度信息。 An example can be found here.(披露:我曾经在 Objective Systems 工作过,链接中引用了其博客。)

    查看Wikipedia entry on the BMP file structure,似乎有一些可选和半可选 (?) 元素的存在没有由任何类似于 PER 前导码的东西指示。这意味着标准的 PER 编码与 BMP 格式不兼容。

    可以做的是尝试用 ASN.1 的各个片段来表示 BMP 结构的每个片段,使用您喜欢的工具生成组件,然后使用自定义逻辑将它们链接在一起。

    关于字节序,ASN.1 旨在通过标准化线路上的编码来解决问题。通常,工具(运行时库和代码生成器)会在后台处理您需要担心的任何事情。

    在我看来,除非您已经有一些经验(以及可以使用这种方法的代码库),否则可能不值得在这里寻求 ASN.1 解决方案。您最好在您选择的编程语言中使用现有的图像库。

    【讨论】:

    • 谢谢。如果一开始不可行,则无需质疑该方法的智慧。 BMP 格式只是一个突如其来的例子,是问题标题中“任意”的一个实例。如果 ASN.1 和 PER 不能用于一次性描述 BMP 格式(或者可能有几层有效负载),那么尝试以这种方式描述文件格式是没有用的。如果你想建一座塔,首先要估算成本。
    • 无意冒犯;抱歉,如果这篇文章的表现不佳。简而言之,PER 不一定适用于任意文件格式,因为它遵循常规的结构规则。如果您喜欢 ASN.1,Encoding Control Notation 可能是您可以使用的解决方案,但大多数工具支持是有问题的,而且 AFAIK 没有任何免费的 ECN 编译器。
    • 没有冒犯。评论很短,所以我更喜欢使用有限的空间来传达想法,而不是陈词滥调。我也无意冒犯。你完美地回答了这个问题,它只是意味着“不”:) 我会调查 ECN。我最感兴趣的是他们解决问题的方式,而不是寻找免费的编译器。再次感谢您。
    猜你喜欢
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-07
    相关资源
    最近更新 更多