Floating point 我应该如何解释REALs的ASN.1 BER标准?

Floating point 我应该如何解释REALs的ASN.1 BER标准?,floating-point,standards,asn.1,der,Floating Point,Standards,Asn.1,Der,我一直在读书 X.690“信息技术——ASN.1编码规则:基本编码规则(BER)、规范编码规则(CER)和区分编码规则(DER)的规范” 具体而言,§8.5.6.4(d)中关于具有可变长度尾数和指数的实值二进制编码的内容如下: “如果位2到1是11,则第二个内容八位字节编码八位字节的数量,比如说,(作为无符号二进制数)用于编码指数值,第三个内容八位字节编码到(X加3)个八位字节(含)内容八位字节将指数值编码为2的补码二进制数;X的值应至少为一个;传输指数的前九位不得为全零或全一。” 这是不一

我一直在读书

  • X.690“信息技术——ASN.1编码规则:基本编码规则(BER)、规范编码规则(CER)和区分编码规则(DER)的规范”
具体而言,§8.5.6.4(d)中关于具有可变长度尾数和指数的实值二进制编码的内容如下:

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

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

有人能澄清这一部分吗

我想应该是这样的

“…然后第二个内容八位组编码的八位组数比八位组数少一个,比如说,…”

“…第三个直至(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=1398101.25(二进制,0x555555*2^-2)
我不确定的一个例子是:

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

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

我认为这只是索引问题

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

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

CO1(填充物)CO2(x)CO3(指数值)。。。CO[x+3]

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

二氧化碳

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

正无穷大和负无穷大通过第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

内容八位字节#2=0x01(因为X的最小值为1)

内容八位组#3=0x00

内容八位组#4=0x01

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


(0*1)^1=0

NaN在8.5.9中定义为无穷大旁边,应为09 01 42

这个

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

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

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