top page > computer > web > rfc > x_690 > 8_1_common
更新日:
文責: 重城良国

8.1 共通する構造

構造

以下のような構造を取る。[end-of-contents]は[length]で長さを指定しなかった場合にのみ付加される。

[identifier] [length] [contents] [end-of-contents]

identifier octets

0から30までのタイプは1バイトで表現し、31以上のタイプは複数バイトで表現される。1バイト目の8,7ビット目と6ビット目、そして1バイト目の残りのビットと2バイト目以降のバイトにはそれぞれ別々の意味がある。

1バイト目の8,7ビット目

これらのビットは型の種類を表す。

1バイト目の6ビット目

このビットが0ならばプリミティブなデータであり、1ならば構成されたデータとなる。

1バイト目の残りのビットと残りのバイト

型にわりあてられた数値となる。0から30まではそのまま1バイト目の5から1ビット目で表現する。31以上の場合、1バイト目の5から1ビット目まではすべて1とし、残りのバイトは以下のルールに従ってエンコードされる。

8ビット目はそのバイトにさらに他のバイトが続くかどうかを示す。8ビット目が1であれば後続のバイトが存在するということであり、0であればそれが最後のバイトであるということである。7から1ビット目が実際の値を表す部分であり、2バイト目以降のバイトのこの部分を、先に来たバイトをより高位の桁として、つなぎ合わせた値が型にわりあてられた数ということになる。

ただし、2バイト目の7から1ビット目をすべて0としてはならない。つまり、無駄な0を最上位の桁に置かないということ。

length octets

このフィールドでは長さを指定するか、あるいは長さを指定しないということを明示する。

どちらを使うか

長さを指定しない場合

このフィールドは1バイトの0x80となる。また、この場合にはデータの最後に[end-of-contents]フィールドを付加することになる。

長さを指定する場合

短い形式と長い形式のどちらを使っても良い。ただし、短い形式では0から127までしか表現できない。

短い形式

1バイトで表現する。8ビット目は0で残りの7から1ビット目で長さを表現する。

長い形式

1バイト目の8ビット目は1とする。残りの7から1ビット目で、長さを表現するのに使用されるバイト数を指定する。ただし、0xFFは使わないほうが良いらしい(そんな長い数を使う必要のある機会なんてない気もするけれど)。

残りのバイトで実際の長さを表現する。先行するバイトを高位の桁としてバイトをつなげた値。

長さを表現するのに必要以上に長いバイト数を使用しても良い。

end-of-contents octets

このフィールドは[length]で長さを指定しなかったときには付加してはならない。長さを指定しなかったときのみ付加する。このフィールドは以下のような値となる。

0x00 0x00

0x00を2つ並べたものということだ。

このフィールドの解釈

このフィールドはタイプ0の長さが0のデータとして考えることもできる。

X.690のトップへもどる ASN.1の共通部分までのコーディング例

正当なCSSです! HTML5 Powered with CSS3 / styling, and Semantics