gpt4 book ai didi

floating-point - 我应该如何解释 REAL 的 ASN.1 BER 标准?

转载 作者:行者123 更新时间:2023-12-04 21:25:01 24 4
gpt4 key购买 nike

我一直在阅读

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

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

    "if bits 2 to 1 are 11, then the second contents octet encodes the number of octets, X say, (as an unsigned binary number) used to encode the value of the exponent, and the third up to the (X plus 3)th (inclusive) contents octets encode the value of the exponent as a two's complement binary numberthe value of X shall be at least one;  the first nine bits of the transmitted exponent shall not be all zeros or all ones."



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

    有没有人能够澄清这一部分?

    我认为它应该阅读

    "...then the second contents octet encodes one less than the number of octets, X say,..."



    或者

    "...the third up to the (X plus 2)nd (inclusive) contents octets..."



    而且,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 (不是数字)定义编码。

    最佳答案

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

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

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

    CO1(stuff) 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

    (零 * 一)^ 一 = 零

    关于floating-point - 我应该如何解释 REAL 的 ASN.1 BER 标准?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4975005/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com