asn.1代码字节顺序独立吗?

时间:2013-12-20 07:58:50

标签: endianness asn.1 powerpc

我有两个软件模块,一个在PowerPC上运行,另一个在x86机器上运行。这两个模块使用ASN.1生成的功能进行通信。 PowerPC是大端,x86是小端。我没有从x86获得预期的数据到PowerPC。使用asn.1时,endianess会成为一个问题吗?

3 个答案:

答案 0 :(得分:2)

我不确定您的问题是关于ASN.1标准还是您正在使用的某些特定工具。如果是前者,则答案是ASN.1(BER,PER等)的编码规则产生的线上的比特不依赖于编码数据的计算机的字节序。 / p>

答案 1 :(得分:1)

为什么不调试收到的数据并将其与原始数据进行比较?这不是比在这里提问一样容易和快捷吗?只是一个断点就足够了

通常,存储在内存中或在计算机之间传输的任何多字节数据都必须遵循特定的字节序,或者必须在流中包含字节序信息,并在接收器中根据需要反转数据

答案 2 :(得分:0)

两个模块使用ASN.1生成的功能进行通信。 [...]使用ASN.1可能会导致持久性问题?

让我们分解一下。这个问题有3个层次。

  1. ASN.1表示法和关联的规范适用于“抽象”语法表示法。它本身与值的编码方式无关。

  2. 值的编码(由ASN.1模式描述)由ASN.1“编码”方案处理;例如BER,CER,DER,PER等。 (Wikipedia列出了11种不同的方案。)要确定特定方案是否对“字节序”敏感,您需要查看相应的规范 1

    < / li>
  3. 如果您使用生成的函数对ASN.1进行编码和解码,则将在其中处理字节序敏感度 问题。这实际上将取决于供应商如何实现生成器以及生成的代码如何执行。

因此,要针对您的特定情况确定答案,您需要找出所使用的编码(BER,PER等),然后阅读供应商文档。但是,我期望,一个高质量的ASN.1生成器将生成可隐藏应用程序中ASN.1编码中任何字节序问题的函数。

找出这是否是问题根源的另一种方法是编写一个简单的测试。设计一个简单的ASN.1模式,生成函数,部署到您的两个(或更多)平台,并查看是否可以传递简单的整数。


1-通过阅读BER规范,BER使用了一种整数编码,该编码与发送方或接收方的字节序无关。您可以通过遵循Wikipedia页面中的“外部参考”链接来找到规格。