CBOR 负整数的基本原理

Rationale for CBOR negative integers

我很困惑为什么 CBOR 选择将负整数编码为无符号二进制数,其值定义为 -1 减去无符号值,而不是例如常规二进制补码表示。除了增加的负范围(IMO,与增加的复杂性相比,它的价值值得怀疑),我是否缺少一个明显的优势?

优点:

  1. 每个整数值只允许一种编码类型,因此所有编码器都会发出一致的输出。如果编码器按照规范的建议对每个值使用最短的编码,它们将发出相同的输出。
  2. 非负数比有符号负数更容易选择最短的数字字段,CBOR 旨在让微型物联网设备轻松传输数据。
  3. 它将两倍的值放入每个整数编码字段宽度中,从而使数据更加紧凑。 (如果整数编码不重叠,它会更紧凑,但会明显更复杂。)
  4. 在需要 bignum 扩展之前,它可以处理两倍大的负值。