asn.1编码以tag + length + value为基本单元,IMPLICIT模式是用context-specific tag替换后面通常是universal的tag;EXPLICIT模式是用context-specific tag的tlv包裏里层的universal tag的tlv。
ber编码时,会默认为EXPLICIT模式。
在bnf范式语法中
1 2 3 4 5 | 圆括号(): 相当于C语言算术表达式中圆括号()的作用。 尖括号<>: 内包含的为必选项。 方括号[]: 内包含的为可选项。 花括号{}: 内包含的为可重复0至无数次的项。 |: 或or的意思;若要表示并and的意思,直接两个符号之间空白间隔。 |
而在asn.1语法中,方括号[Index]指示的是context-specific tag值,即0xA0 + Index;花括号{}用于SEQUENCE,SET或CHOICE的定义。如
1 2 | Number2 ::= [7] IMPLICIT [1] INTEGER AccountedClosed ::= [2] EXPLICIT BOOLEAN |
这里Number2的tag值为0xA7;而对于AccountedClosed,当其值为true时其ber编码为
1 | 0xA2 0x3 0x1 0x1 0xFF |
refer to:
https://blog.csdn.net/sever2012/article/details/7767867
https://www.cnblogs.com/qook/p/5957436.html