首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ASN.1实误码译码

ASN.1实误码译码
EN

Stack Overflow用户
提问于 2015-01-26 07:26:42
回答 2查看 1.1K关注 0票数 0

我被赋予了关于ASN.1解码格式的任务。我传递了一些存储结构标签是真实的,我必须拆解它并放入类型为double。问题是互联网上的信息很少。转换十进制格式所需的数字。

下面是一个例子:

代码语言:javascript
运行
复制
first-man NUMBER ::= 
{  
    numb 11.987
}

其结果是一个数字:

代码语言:javascript
运行
复制
30098007 0231312E 393837

标准误码率立即提出了许多问题:

代码语言:javascript
运行
复制
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?简单得不得了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-26 09:48:16

解压嵌套块:

代码语言:javascript
运行
复制
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字节--它可能是任何东西。

因此,如果没有进一步的信息,这是无法破译的。它是从哪里来的?

票数 2
EN

Stack Overflow用户

发布于 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)。

0x020b00000010,所以(b)在这里适用。8.5.8说明了ISO 6093中进一步规定的三种可能的表格。因为这是一个ISO标准,所以您将找不到免费的。我相信,这些格式都是ASCII字符串。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28146110

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档