如何将双精度数组转换为 JS 数组?
Posted
技术标签:
【中文标题】如何将双精度数组转换为 JS 数组?【英文标题】:How to convert array of doubles into JS array? 【发布时间】: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 中的数据类型。
【参考方案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 ]
【讨论】:
以上是关于如何将双精度数组转换为 JS 数组?的主要内容,如果未能解决你的问题,请参考以下文章