请原谅我的英语不好。我在十进制系统中有一个数字: 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 - REAL)
1个字节:
(8-7) Class - Universal - 00
(6) P/C - Primitive - 0
(5-1) Tag Number - 01001(REAL)
TOTAL: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 - NOT EQUAL 03 为什么? (不正确)
90 是什么?打电话给八重奏?怎么找到它?这本书没有说,或者我根本就不明白。
在 FE 编号-2(指数)中,如何翻译 FE ,而不是获得254和-2?也许它包含有关字节的信息: 90 ?
感谢您的聆听。
答案 0 :(得分:3)
在"第1章中.ASN.1编码的通用规则"它声明编码有三个部分:
长度块指定值块的长度。
0.15625的编码为八位字节09 03 80 FB 05
,如下所示:
09 - information block (1 octet)
03 - length block (1 octet)
80 FB 05 - value block (3 octets)
值块本身由三部分组成:信息八位字节,指数块和尾数块。在这种情况下,尾数是M = 5(基数为2的101),指数是E = -5。因此,值块为:
80 - information octet
FB - the exponent block (FB = -5)
05 - the mantissa block (5)
信息八位字节指定各种信息,包括:
要回答关于FE被解释为-2的问题,这就是2s-补码算术(more info)中负数的表示方式。对于单个八位字节数字,我们有:
FF -> -1
FE -> -2
FD -> -3
...
80 -> -128
7F -> +127
7E -> +126