【问题标题】:How to convert array of doubles into JS array?如何将双精度数组转换为 JS 数组?
【发布时间】:2021-10-18 08:39:01
【问题描述】:

我有 base64 编码的二进制数据(~2.5MB)。数据由 c double 值数组组成。在 c 语言中,使用这个数组是免费的——您只需将整个数据读入内存并使用double* 地址访问任何元素。

但是,现在我需要在 javascript 中使用这些数据。我正在寻找能够从 js 代码中读取此数组的最有效方法。

【问题讨论】:

  • 您能否添加一个此类 base64 编码数据的简短样本以及它的预期输出必须是什么?
  • 不幸的是,我没有短样本,也不知道如何将 2.5MB base64 数据修剪成短片。就字节而言,每个双精度数是 8 字节的有符号数。预期输出将是 Number 类型的 Array 或用于访问具有索引的元素的流类。
  • 你不能从 C 中的 double 的短数组中生成一个短样本吗?
  • @ikhvjs C 标记在这里如何相关?有 C 知识的人如何在这里提供帮助?
  • @VLAZ,我只是认为了解 C 和 Javascript 的人会帮助解决这个问题。该问题提到了 C 中的数据类型。

标签: javascript arrays c binary


【解决方案1】:

你可以在 Node 中使用这个函数:

function doublesFromBase64(base64) {
    let buff = Buffer.from(base64, 'base64');
    let result = [];
    for (let i = 0; i < buff.length; i += 8) {
        result.push(buff.readDoubleLE(i));
    }
    return result;
}

为了测试它,我从以下一段 C 代码中生成了一个示例 base64 编码字符串,它使用了一个函数 base64_encode 发现 in this answer

double arr[] = {15.9234, 2.05e30, -19};
size_t output_length;
char * result = base64_encode((unsigned char *) arr, 3* sizeof(double), &output_length);
printf("%s", result);

这个输出:

uECC4sfYL0Cjw3dB6N85RgAAAAAAADPA

我将此字符串传递给顶部的函数:

function doublesFromBase64(base64) {
    let buff = Buffer.from(base64, 'base64');
    let result = [];
    for (let i = 0; i < buff.length; i += 8) {
        result.push(buff.readDoubleLE(i));
    }
    return result;
}

let result = doublesFromBase64("uECC4sfYL0Cjw3dB6N85RgAAAAAAADPA");

console.log(result);

这个输出:

[ 15.9234, 2.05e+30, -19 ]

【讨论】:

    猜你喜欢
    • 2011-07-07
    • 1970-01-01
    • 2015-09-13
    • 1970-01-01
    • 1970-01-01
    • 2020-05-24
    • 1970-01-01
    • 2013-03-10
    • 2011-11-22
    相关资源
    最近更新 更多