6

我一直在阅读

  • X.690“信息技术 – ASN.1 编码规则:基本编码规则 (BER)、规范编码规则 (CER) 和可区分编码规则 (DER) 的规范”

特别是第 8.5.6.4 (d) 节,关于具有可变长度尾数和指数的 REAL 值的二进制编码,内容如下:

“如果位 2 到 1 为 11,则第二个内容八位字节编码八位字节的数量,例如X(作为无符号二进制数)用于编码指数的值,第三个内容为(X加 3)(包括)内容八位字节将指数的值编码为二进制补码;  X的值应至少为 1;传输的指数的前 9 位不应全为零或全为 1。

这是不一致的,因为从“第三个到 (X plus 3) [rd] ”的八位字节实际上是 X+1 个八位字节。

有人能澄清这部分吗?

我认为它应该读

“......那么第二个内容八位字节编码八位字节数少一个,X说,......”

或者

“......第三个直到(X加2)nd(包括)内容八位字节......”

而且, X的最小值真的是 1,还是 0表示1 个八位字节?

附录:如果有人可以向我提供一些不同 BER 编码值的测试数据(八位字节字符串及其含义),那将很有帮助。

到目前为止我所拥有的是

  • 09 00 = 0(零)
  • 09 01 40 = +INF(无穷大)
  • 09 01 41 = -INF
  • 09 08 03 2b 31 2e 30 65 2b 30 = "+1.0e+0" = 1.0(精确十进制)
  • 09 05 80 fe 55 55 55 = 1398101.25(二进制,0x55​​5555 * 2^-2)

我不确定的一个例子是:

  • ? 09 06 83 00 fc 00 00 01 = 0.0625(二进制,0x000001 * 2^-4)?

此外,似乎没有为 NaN (不是数字)定义编码。

4

2 回答 2

2

我认为这只是索引的问题。

Content Octet #1 包含一些内容(编码类型、符号位、基数、比例因子和指数格式)。

如果指数格式为“11”,则下一个八位字节(内容八位字节#2)包含一个数字 X,它表示用于编码指数值的八位字节数。第三个内容八位字节包含部分指数值。最后一个内容八位字节是 x+3。

CO1(材料) CO2(x) CO3(指数值) ... CO[x+3]

x 的最小值为 1。如果 x=1,则 CO[x+3] = CO4,这意味着指数值的最小内容八位字节数为 2。这种形式的最短表示是

CO1 CO2 CO3 CO4

这意味着“09 00”不是第 8.5.6 节的有效编码。与“09 01 04”和“09 01 41”一样。

PLUS-INFINITY 和 MINUS-INFINITY 是通过第 8.5.8 节的规则编码的,这与第 8.5.6 节的规则不兼容。

按照 8.5.6 节的规则编码零是这样的

CO1:8  =  1      (Content Octet #1 bit 8)
CO1:7  =  x =  0 (Content Octet #1 bit 7 is dont care, but I'll use 0 for positive)
CO1:65 = 00      (Content Octet #1 bits 6 and 5 is 00 for base two)
CO1:43 =  x = 01 (Content Octet #1 bits 4 and 3 is scaling factor, so we don't care but I'll make it 01 for a value of one)
CO1:21 = 11      (Content Octet #1 bits 2 and 1 is the exponent format and '11' is the format in question)

所以内容八位字节#1 = 1000 0111 是 0x87

Content Octet #2 = 0x01(因为 X 的最小值是 1)

内容八位字节#3 = 0x00

内容八位字节#4 = 0x01

内容八位组 #3 和 #4 给出的指数值为 1

(零 * 一) ^ 一 = 零

于 2011-04-21T23:50:23.647 回答
0

NaN 在 8.5.9 中在 Infinity 旁边定义,为 09 01 42

09 06 83 00 fc 00 00 01 = 0.0625(二进制,0x000001 * 2^-4)

根据 8.5.7.4 d) 无效,CO2(X)“应至少为一个”。但是当我忽略这些约束时,我也会得到你的结果。

更好:09 03 80 fc 01 = 0.0625(二进制,0x01 * 2^-4)

于 2013-07-08T23:01:53.213 回答