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

Node.js中如何将Buffer转换为整数数组?含C#字节数组传输场景

解决Node.js将Buffer转回C#发送的Double数组问题

首先得明确:你之前用[...buf]或者Array.prototype.slice.call(buf, 0)拿到的只是Buffer里单个字节的数值(0-255),但原来的double是由8个字节组合而成的,所以直接拆成字节数组肯定拿不到原本的数值。Node.js的Buffer提供了专门的方法来读取多字节的数值类型,刚好能解决这个问题。

核心思路

C#默认以**小端字节序(Little Endian)**将double数组转为字节数组,所以我们需要在Node.js里按相同的字节序,每次读取8个字节(double的固定长度)来还原每个数值。

代码实现(转回Double数组)

function convertBufferToDoubles(buf) {
    const result = [];
    // 每个double占用8个字节,循环步长设为8
    for (let i = 0; i < buf.length; i += 8) {
        // 读取小端字节序的double值,对应C#的默认输出
        const doubleValue = buf.readDoubleLE(i);
        result.push(doubleValue);
    }
    return result;
}

// 使用示例:假设你的buf是从C#接收的Buffer
const originalDoubles = convertBufferToDoubles(buf);
console.log(originalDoubles); // 这就是你C#里原有的double数组

如果需要转回整数数组

如果原double数组里存储的都是整数(比如C#里的double数组实际存的是整数值),可以在读取后转成整数,注意根据需求选择合适的转换方式:

function convertBufferToIntsFromDoubles(buf) {
    const result = [];
    for (let i = 0; i < buf.length; i += 8) {
        const doubleValue = buf.readDoubleLE(i);
        // 可选:Math.round(四舍五入)、Math.floor(向下取整)、parseInt(截断小数)
        result.push(Math.round(doubleValue));
    }
    return result;
}

注意字节序的匹配

如果你的C#代码特意用了大端字节序(Big Endian)来转换字节数组,那么只需要把readDoubleLE换成readDoubleBE即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:11:06