You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js使用cbor库decodeAllSync后encodeAsync结果长度不一致问题

问题原因
  • cbor.decodeAllSync() 的作用是解码输入中包含的所有独立CBOR数据项,返回值是包含所有解码结果的数组。你原输入output中仅包含1个CBOR数据项,所以解码得到的results是长度为1的数组,内容为你要的原始数据。
  • 你直接将整个results数组传入cbor.encodeAsync()时,方法会把这个数组作为单个CBOR数组类型进行编码,因此最终输出会多一个CBOR数组头字节129(对应0x81,标识长度为1的数组),和原输入结构不一致。
解决方案

如果你的输入output始终仅包含1个CBOR数据项,直接取解码数组的第一个元素进行编码即可,修正代码如下:

const cbor = require('cbor');
// 省略原有逻辑
const results = cbor.decodeAllSync(output);
// 取解码结果的第一个元素编码,而非整个数组
const input = cbor.encodeAsync(results[0]);
console.log(output);
input.then( 
    function (x) {
      var v=new Uint8Array(x);
      console.log(v);
    },
    function () {
      console.log("fail ");
    });

如果你的输入output包含多个独立CBOR数据项,需要批量编码还原为原结构,要使用对应批量编码API,不要直接传入数组做单值编码。

内容的提问来源于stack exchange,提问作者Antilope

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 16:27:03