私は読んでいます
- X.690「情報技術 – ASN.1 エンコード規則: Basic Encoding Rules (BER)、Canonical Encoding Rules (CER)、および Distinguished Encoding Rules (DER) の仕様」
特に、可変長の仮数部と指数部を持つ REAL 値のバイナリ エンコーディングに関する §8.5.6.4 (d) は、次のように読みます。
「ビット 2 から 1 が 11 の場合、2 番目の内容のオクテットは、指数の値をエンコードするために使用されるオクテットの数、Xは(符号なし 2 進数として)をエンコードし、3 番目は ( Xプラス 3)まで」 th (包括的) 内容オクテットは、指数の値を 2 の補数の 2 進数としてエンコードします。X の値は少なくとも 1 でなければなりません。送信された指数の最初の 9 ビットは、すべてゼロまたはすべて 1 であってはなりません。」
「3 番目から (X plus 3) [rd]まで」のオクテットは実際には X+1 オクテットであるため、これは矛盾しています。
誰かがこのセクションを明確にすることができますか?
どちらかを読むべきだと思います
「...次に、2 番目のコンテンツ オクテットは、オクテット数より 1 つ少ない数をエンコードします。Xと言うと、...」
また
「... 3 番目から (X プラス 2) 番目(両端を含む) の内容のオクテットまで...」
また、 Xの最小値は本当に 1 ですか、それとも 1 オクテットを意味する 0 ですか?
補遺: BER でエンコードされたさまざまな値 (意味を持つオクテット文字列) のテスト データを誰かが提供してくれると助かります。
私がこれまでに持っているのは
- 09 00 = 0 (ゼロ)
- 09 01 40 = +INF (無限大)
- 09 01 41 = -INF
- 09 08 03 2b 31 2e 30 65 2b 30 = "+1.0e+0" = 1.0 (正確な 10 進数)
- 09 05 80 fe 55 55 55 = 1398101.25 (バイナリ、0x555555 * 2^-2)
よくわからない例は次のとおりです。
- ? 09 06 83 00 fc 00 00 01 = 0.0625 (バイナリ、0x000001 * 2^-4) ?
また、NaN(数値ではない)に対して定義されたエンコーディングがないようです。