Rhu*_*arb 5 floating-point standards asn.1 der
我一直在阅读
特别是,§8.5.6.4(d),关于具有可变长度尾数和指数的REAL值的二进制编码,如下所示:
"如果第2位到第1位是11,则第二个内容八位字节编码八位字节的数量,X表示,(作为无符号二进制数)用于编码指数的值,第三个直到(X加3)th(包含)内容八位字节将指数的值编码为二进制补码二进制数 ; X的值至少为1 ;发送指数的前九位不应全为零或全部为1.
这是不一致的,因为从"第三个到(X加3)[rd] "的八位字节实际上是X + 1个八位字节.
有人能澄清这一节吗?
我认为它应该读
"......然后,第二个内容八位字节编码比八位字节数少一个,X说,......"
要么
"......第三个到(X加2)和nd(含)内容八位字节......"
并且,X的最小值是1,还是0 表示 1个八位字节?
附录:如果有人可以向我提供一些不同BER编码值(八位字符串及其含义)的测试数据,那将会很有帮助.
到目前为止我所拥有的是什么
我不确定的一个例子是:
此外,似乎没有为NaN定义编码(不是数字).
小智 2
我认为这只是索引的问题。
内容八位字节 #1 包含一些内容(编码类型、符号位、基数、比例因子和指数格式)。
如果指数格式为“11”,则下一个八位位组(内容八位位组#2)包含数字 X,它表示用于对指数值进行编码的八位位组数量。第三个内容八位字节包含部分指数值。最后一个内容八位字节是x+3。
CO1(东西) CO2(x) CO3(指数值) ... CO[x+3]
x 的最小值为 1。如果 x=1,则 CO[x+3] = CO4,这意味着指数值的内容八位字节的最小数量为 2。这种形式的最短表示是
二氧化碳1 二氧化碳2 二氧化碳3 二氧化碳4
这意味着“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)
Run Code Online (Sandbox Code Playgroud)
所以内容八位字节#1 = 1000 0111 是 0x87
内容八位字节#2 = 0x01(因为 X 的最小值为 1)
内容八位字节 #3 = 0x00
内容八位字节 #4 = 0x01
内容八位字节 #3 和 #4 的指数值为 1
(零 * 一) ^ 一 = 零