我最近不得不使用 ASN.1 Unaligned PER 编码数据。我在理解数据类型UPER
中的二进制补码整数编码如何时遇到问题。SEQUENCE
它似乎错误地翻转了最重要的位(单词选择不当)。对于正整数,前导位是1
,对于负整数,它是0
. 我认为这里有一种疯狂的方法,但经过一天的工作,我似乎无法将其从 ITU-T 标准中挖掘出来,我也无法自己弄清楚。我怀疑这是因为它们INTEGER's
被包裹在SEQUENCE
类型中,但我不明白它为什么会这样做。我应该指出,我对 ASN.1 的理解非常有限。
一个简单的例子,假设我有以下架构
BEGIN
FooBar ::= SEQUENCE {
Foo INTEGER (-512..511),
Bar INTEGER (-512..511)
}
END
我将以下内容编码为Unaligned PER
test FooBar ::=
{
Foo 10,
Bar -10
}
编码为十六进制和二进制字符串的结果以及分别的预期值。
HEX: 0x829F60
BIN: 100000101001111101100000
EXPECTED HEX: 0x02BF60
EXPECTED BIN: 000000101011111101100000
关于这里发生了什么的任何想法?