【发布时间】:2015-01-26 07:26:42
【问题描述】:
我的任务是关于 ASN.1 解码格式。我传递了一些存储结构标记为 REAL 的东西,我必须将其拆开并放入 double 类型。问题是网上的资料太少了。我需要转换十进制形式的数字。
这是一个例子:
first-man NUMBER ::=
{
numb 11.987
}
结果是一个数字:
30098007 0231312E 393837
立即有很多问题,标准 BER 规定:
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?就这样?
【问题讨论】:
-
如果“31312E 393837”中的每两个十六进制数字被识别为ASCII字符代码,则它们变为“1 1 . 9 8 7”。
-
@Fumu 7 - 那么这意味着 02 31312E 393837?
-
不,“31312E 393837”可以解释为“11.987”。 “02”不是可打印的代码。 Ascii 代码 &h02 是控制代码 STX(TeXt 状态)。让我们看看asciitable.com的ASCII码表,你可能会发现十六进制中的“31”(Hx)表示字符“1”,“2E”表示字符“.”,等等。
-
现在
numb定义了吗? -
@Fumu7 02 为控制字节,表示号码为NR2格式
标签: c++ algorithm data-structures stl asn.1