私は最近、ASN.1 Unaligned PER でエンコードされたデータを扱う必要がありました。データ型UPER
で 2 の補数の整数エンコードを行う方法を理解するのに問題があります。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
}
16 進数およびバイナリ文字列としてのエンコードの結果と、それぞれ期待される値。
HEX: 0x829F60
BIN: 100000101001111101100000
EXPECTED HEX: 0x02BF60
EXPECTED BIN: 000000101011111101100000
ここで何が起こっているかについてのアイデアはありますか?