2014-09-02 90 views
1

我目前正在學習抽象語法記法一和閱讀ITU-T Recommendation X.690整數的ASN基本編碼規則

在第15頁段落8.3.2中,寫到:

如果一個整數值的編碼的內容八位位組包括多於一個八位字節,第一個字節和的第8位的,則位第二個八位字節:

  1. 不應該都是1;和
  2. 不應全爲零。

注 - 這些規則確保整數值始終以儘可能最小的八位字節數進行編碼。

據我所知,對於總是以儘可能小的八位字節數進行編碼的整數,第一個字節不能爲零。

但是呢?如果我想使用基本編碼規則對值65408(1111 1111 1000 0000)進行編碼,我應該怎麼做?

回答

1

據我所知,對於整數總是編碼在儘可能小的八位組數,第一個八位組不應爲零。

沒有必要。如果整數的最高位設置爲1,則該值被認爲是負值(在帶符號整數的情況下)。爲了表示整數正數 - 添加一個零(0)前導字節。一般來說。

這裏是關於整數編碼的好文章:http://msdn.microsoft.com/en-us/library/windows/desktop/bb540806(v=vs.85).aspx

+0

那你怎麼編碼-128呢? – Geoffroy 2014-09-03 04:54:11

+0

簡單地說:02 01 80(full TLV) – Crypt32 2014-09-03 15:03:55

+0

and +128:02 02 00 80 – Crypt32 2014-09-03 15:13:35

0

編碼是2的補碼。你需要一個前導八位字節0000 0000.請注意,這不會違反你引用的規則,因爲第二個字節的第8位將是1.

+0

然後編碼-128我需要一個領先的八位字節爲0000 0000? – Geoffroy 2014-09-03 04:47:32