我被赋予了关于ASN.1解码格式的任务。我传递了一些存储结构标签是真实的,我必须拆解它并放入类型为double。问题是互联网上的信息很少。转换十进制格式所需的数字。
下面是一个例子:
first-man NUMBER ::=
{
numb 11.987
}
其结果是一个数字:
30098007 0231312E 393837
标准误码率立即提出了许多问题:
A BER encoded "tag" is made up of several bit fields:
---------------------------------
| 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
---------------------------------
|Class |P/C| Tag Number |
---------------------------------
如果我知道我将精确地出现类型REAL,那么我为什么要解析这个结构,因为它只选择标记。我们的号码是30098007 0231312E 393837。那又怎么样?因为我知道这是一个浮点数,所以我的哪些部分可以放回11.987。一般说来,微软是否有这种编码的结构?
或者我知道我的数字是十进制的。我只是用来破译字符串的?例如NR2 = "+ 5.65“形式的数字5.65?简单得不得了?
发布于 2015-01-26 09:48:16
解压嵌套块:
30 09 -- SEQUENCE, of length 9
80 07 -- [0], context-specific Tag 0 of length 7
02 31 31 2E 39 38 37 -- ?? "11.987"
具体的语境意味着它的意义应该从上下文中被知道。例如,我不知道这意味着什么,因为我没有任何上下文。至于那个02字节--它可能是任何东西。
因此,如果没有进一步的信息,这是无法破译的。它是从哪里来的?
发布于 2015-06-02 13:17:36
参见国际电联-T十.690,§8.5,其中描述了真实类型的内容编码。在实践中,真正的价值很少被使用。
托尼提供了一个很好的分类编码,这是一个标签长度-值三位一体,但编码02 31 31 2E 39 38 37
可能需要一点澄清。要理解02
前缀,我们需要参考第8.5.6节:
第一个内容八组的第8条应设置如下: ( a)如第8位= 1,则适用8.5.7所指明的二进制编码; ( b)如第8位= 0,第7位=0,则适用8.5.8中所指明的十进制编码; c)如果第8位=0,第7位= 1,那么要么是"SpecialRealValue“(见ITU)。X.680 \ ISO/IEC 8824-1)或减去零的值编码为8.5.9)。
0x02
是0b00000010
,所以(b)在这里适用。8.5.8说明了ISO 6093中进一步规定的三种可能的表格。因为这是一个ISO标准,所以您将找不到免费的。我相信,这些格式都是ASCII字符串。
https://stackoverflow.com/questions/28146110
复制相似问题