我很困惑为什么CBOR选择将负整数编码为无符号二进制数,其值定义为-1减去无符号值,而不是例如常规二进制的补码表示。除了增加负范围之外,我是否缺少一个明显的优势(IMO,与增加的复杂性相比,其价值值得怀疑(?
优点:
- 每个整数值只有一个允许的编码类型,因此所有编码器都将发出一致的输出。如果编码器按照规范的建议对每个值使用最短的编码,它们将发出相同的输出。 对于非负数,选择
- 最短的数字字段比选择有符号负数更容易,CBOR的目标是让微型物联网设备轻松传输数据。
- 它在每个整数编码字段宽度中容纳两倍的值,从而使数据更加紧凑。(如果整数编码不重叠,它会更紧凑,但这会明显更复杂。
- 在需要 bignum 扩展之前,它可以处理两倍大的负值。