gpt4 book ai didi

c++ - 使用 BER 编码和解码 ASN.1 REAL

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:45:08 24 4
gpt4 key购买 nike

请原谅我的英语不好。我有一个十进制数:0.15625

(这是示例)http://www.strozhevsky.com/free_docs/asn1_in_simple_words.pdf (第5页)

根据 BER ASN.1 的规则 - 以八进制编码:09 03 90 FE 0A(这是正确的决定)

http://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf -标准 ASN.1(8.5 - 真实)

1字节:

(8-7) Class - Universal - 00 
(6) P/C - Primitive - 0
(5-1) Tag Number - 01001(REAL)

总计:00001001(2) = 09(16)(正确)

2字节:

     (8) binary encoding - 1
_____________________
(7) When binary encoding is used (bit 8 = 1), then if the mantissa M is
non-zero, it shall be represented by a sign S, a positive integer value N
and a binary scaling factor F, such that:
M = S × N × 2F
Bit 7 of the first contents octets shall be 1 if S is –1 and 0 otherwise.
What I would have bit 7?
_____________________
(6-5) base 8 - 01
_______________________
(3-4) Bits 4 to 3 of the first contents octet shall encode the value of
the binary scaling factor F as an unsigned binary
integer. I don't have scaling factor. - 00
_____________________
(2-1) 8.5.6.4 Bits 2 to 1 of the first contents octet shall encode
the format of the exponent as follows: I do not know how to determine
what my value will be here. (Poor understand English). I think 11?

总计:1?010011 - 不等于 03 为什么? (不正确)

什么是90?叫八字?如何找到它?书上没说,或者我根本看不懂。

FE 编码数字-2(指数)中,如何转换FE,而不是得到254 和-2?也许它包含有关字节的信息:90

感谢您的收听。

最佳答案

在“第 1 章。ASN.1 编码的通用规则”一节中,它指出编码包含三个部分:

  1. 一个信息 block
  2. 一个长度 block
  3. 一个值(value) block

长度 block 指定值 block 的长度。

将 0.15625 编码为八位字节 09 03 80 FB 05 分解如下:

09       - information block (1 octet)
03 - length block (1 octet)
80 FB 05 - value block (3 octets)

值 block 本身由三部分组成:一个信息八位字节、一个指数 block 和一个尾数 block 。在这种情况下,尾数为 M = 5(基数为 2 的 101),指数为 E = -5。因此值 block 是:

80       - information octet
FB - the exponent block (FB = -5)
05 - the mantissa block (5)

信息八位组指定各种信息,包括:

  • 我们正在编码一个实数
  • 我们在基数 2 中使用,并且
  • 数字是非负数 (>= 0)

为了回答您关于 FE 被解释为 -2 的问题,这是负数在 2s 补码算术中的表示方式 (more info) .对于单个八位字节数,我们有:

FF   ->  -1
FE -> -2
FD -> -3
...
80 -> -128
7F -> +127
7E -> +126

关于c++ - 使用 BER 编码和解码 ASN.1 REAL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28166194/

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