2014-09-02 47 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