使用Google CBORTree库编码Double类型输出与预期不符如何解决
问题根因
你遇到的编码结果不一致问题是Google CBORTree库的CborObject.createFromJavaObject()方法的自动类型推断逻辑导致的:
- 该方法会对传入的数值做自动优化编码,尝试使用占用空间最小的CBOR类型存储数据,对于浮点值会默认先做32位Float精度适配后再编码为Double,导致低位精度丢失,最终输出和精确Double编码的结果不一致。
- 你输出的
FB-40-60-2A-8F-60-00-00-00就是129.33被截断为Float精度后再转成Double的编码结果,和精确Double值的编码存在差异。
修复方案
不要使用自动类型推断的createFromJavaObject方法,直接显式构造CborDouble对象即可得到精确的Double类型编码:
val cborData = CborDouble(129.33) val cborBytes = cborData.toCborByteArray()
修改后生成的字节和cbor.me的预期结果完全一致。
内容的提问来源于stack exchange,提问作者Yasin Eraslan
相关产品推荐
相关产品推荐

