※注意! 本内容は独学で得た知識のため、内容に誤りがある場合があります。
予め誤りがある前提でご覧ください。
■PERコーディングとは
PERコーディングとは、極力データサイズを小さくするためにできた符号化規則で「プリアンブル(省略可)・データ長(省略可)・値(省略可)」の3種類で構成されています。
またオクテット列ではなく、ビット列で構成されているため情報が圧縮されてより少ないデータ量で転送が可能になります。
プリアンブルとしては主に「Extensionbit」「OptionalBitmap」「DefaultBitmap」があり、データ長として「DataLength」、値として「Value」となっています。
・Extensionbit
将来拡張される可能性がある場合があるため、拡張される場合を想定して「...」を付与することで定義される。
この「...」がある場合は最初の1BitをExtensionbitとして追加情報があるかどうか判断される。
例えば'60'Hという情報が転送されてきたとして、ASN.1の情報として
Data ::= SEQUENCE { value Value } Value ::= INTEGER(0..15)
である場合は、
HEX |Bits|Contents |Value|Parameter|Link ----+-----------------------------------|-----+---------+------ | |Data SEQUENCE Data | |value |Value 60|0110|Value INTEGER Data | 6| 6| |0000|Padding | | |
となるので
Data value = 6
という結果が返ります。
しかし、以下のように
Data ::= SEQUENCE { value Value, ... } Value ::= INTEGER(0..15)
Extensionbit(...)がある場合は、
HEX |Bits|Contents |Value|Parameter|Link ----+-----------------------------------|-----+---------+------ 60|0___|Data SEQUENCE Extensionbit | 0|False | | |Data SEQUENCE Data | |value |Value |_110|Value INTEGER Data | 12| 12| |0___| | | | |_000|Padding | | |
となるので
Data value = 12
という結果が返ります。
・OptionalBitmap
情報において必須項目(Mondatry)とオプション(Optional)の2種類があります。
ASN.1においてもそれは同様でオプション項目には以下のようにOPTIONALが付与され、OptionalBitmapにてオプション項目が有効か無効か判定されます。
例えば'60 24'Hという情報が転送されてきたとして、ASN.1の情報として
Data ::= SEQUENCE { value1 Value, -- Mondatry value2 Value OPTIONAL, -- Optional value3 Value OPTIONAL, -- Optional value4 Value OPTIONAL, -- Optional } Value ::= INTEGER(0..15)
である場合は
HEX |Bits|Contents |Value|Parameter|Link ----+-----------------------------------|-----+---------+------ 60|011_|Data SEQUENCE OptionalBitmap |'011'|off,on,on| | |Data SEQUENCE Data | |value1 |Value |___0|Value INTEGER Data | 0| 0| |000_| | | | | |Data SEQUENCE Data | |value3 |Value |___0|Value INTEGER Data | 1| 1| 24|001_| | | | | |Data SEQUENCE Data | |value4 |Value |___0|Value INTEGER Data | 2| 2| |010_| | | | |___0|Padding | | |
となるので、
Data value1 = 0 value3 = 1 value4 = 2
という結果が返ります。
・DefaultBitmap
パラメータとして標準値が決まっている場合、敢えてその値をBitsから取り出さなくてもDEFAULTを付与することで判定用の1bitで標準値を取り出すことが可能になります。
例えば'80'Hという情報が転送されてきたとして、ASN.1の情報として
Data ::= SEQUENCE { value Value } Value ::= INTEGER(0..15)
である場合は
HEX |Bits|Contents |Value|Parameter|Link ----+-----------------------------------|-----+---------+------ | |Data SEQUENCE Data | |value |Value 80|1000|Value INTEGER Data | 8| 8| |0000|Padding | | |
となるので、
Data value = 8
という結果が返ります。
しかしここで以下のように
Data ::= SEQUENCE { value Value DEFAULT 99 } Value ::= INTEGER(0..15)
DEFAULTを付与すると
HEX |Bits|Contents |Value|Parameter|Link ----+-----------------------------------|-----+---------+------ 80|1___|Data SEQUENCE DefaultBitmap | '1'|on | | |Data SEQUENCE Default Data | | 99| |_000|Padding | | | |0000| | | |
となるので、
Data value = 99
という結果が返ります。
・DataLength
データ長を定義する場合SIZE(a)のように固定長である場合とSIZE(a..b)のように可変長である場合があります。
SIZE(a)の場合はaを表すことができるBit数を確保すれば良いですがSIZE(a..b)のように可変長である場合はそのサイズを測るBit数の判定が必要となります。
例えば'10'Hという情報が転送されてきたとして、ASN.1の情報として
Value ::= INTEGER(4..19)
である場合は、19-4である15を表すことができる4Bits(’1111’B)が必要になります。
しかしここで重要なのは初期値(Value=0のとき)が4なので、
HEX |Bits|Contents |Value|Parameter|Link ----+-----------------------------------|-----+---------+------ 10|0001|Value INTEGER Data | 1| 1+4=5| |0000|Padding | | |
となります。そうなると値としては
value = 5
という結果が返ります。
0 件のコメント:
コメントを投稿