2011-02-11 75 views
5

我一直在讀我應該如何解釋REAL的ASN.1 BER標準?

  • X.690 「信息技術 - ASN.1編碼規則:基本編碼規則(BER),典型編碼規則(CER)和區分編碼規則(DER)的規範」

特別地,§8.5.6.4(d),關於REAL值的用可變長度尾數和指數的二進制編碼,內容如下:

「如果位2至1是11,那麼第二個c ontents八位位組編碼的八位位組數,X說,(爲一個無符號二進制數)用於編碼指數的值,和所述第三至(3 X加)(含)內容八位字節將指數的值編碼爲二進制補碼二進制數;   的值X應至少有一個;  所發送的指數的1到9位不得全零或全1。」

這是不一致的,如從八比特組‘第三至(X + 3)[RD]’其實X + 1字節。

是任何人都能夠澄清這一段?

我認爲它應該閱讀或者

」 ......那麼第二個內容八位編碼012小於一個八位字節的數目,X說,... 「

」 ......第三至(X加上2)第二(含)內容字節......」

而且,是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定義的編碼(不是數字)。

回答

2

我認爲這只是一個索引問題。

內容字節#1包含一些東西(編碼類型,符號位,底座,比例因子,和指數格式)。

如果指數格式爲「11」,那麼下一個八位組(內容字節#2)包含多個X表示用來編碼指數的值的字節數。第三個Content Octet包含指數值的一部分。最後一個Content Octet是x + 3。

CO1(東西)CO 2(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和負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是0×87

內容字節#2 = 0×01(因爲中的最小值X是1)

內容字節#3 = 0×00

內容字節#4 = 0×01

內容八位位組#3和#4得到1

的指數值(零*之一)^一個零=

0

NaN被在8.5.9中定義旁邊無限與將是09 01 42

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

根據被至8.5.7.4 d)不是有效的,CO 2(該X)「應在至少是一個「。但是當我忽略這些約束時,我也會得到你的結果。

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