我一直在try 几种不同的解决方案来编码和解码一个Base64脚本Float32Array,这样我就可以在JSON文档中将其发送到我的Web API.但每次我将字符串解码回一个浮点数组时,我得到的是一个比开始更长的array.我try 了以下方法

它们都是"工作"的,因为它们将长度为76800的MYFloat32Array编码为Base64字符串.但每当我对该字符串进行解码时,我都会得到一个更长的array.即使我使用自己的"解码"功能.

例如,这是我测试第一种方法,但我看到所有方法都是这样的.(‘pcdRef.Current’是我的Float32Array).这个代码...

var base64String = encode(new Uint8Array(pcdRef.current.buffer));            
var prev = decode(base64String)
var prevArray = new Float32Array(prev.buffer);

console.log("original length = " + pcdRef.current.length + ", rehydrated length = " + prevArray.length);

...给我提供了这个控制台输出

original length = 76800, rehydrated length = 77284

对于我的实际Web API接收的数据也是如此.

谁能告诉我我做错了什么?

推荐答案

仔细判断Float32Array的基础缓冲区的属性.可以将类型数组(如Float32Array)创建为view of an underlying buffer,at an 101 and with 102.这意味着访问数组的缓冲器without以及处理byteOffsetbyteLength可能失败.

演示:

const buffer = new ArrayBuffer(16);
const array = new Float32Array(buffer, 4, 3);

console.log(array.buffer === buffer); // true
console.log(array.buffer.byteLength); // 16
console.log(array.length * Float32Array.BYTES_PER_ELEMENT); // 12

// This incorrectly gets the full buffer:
console.log(new Uint8Array(array.buffer).length); // 16
// This gets the portion of the buffer corresponding to the Float32Array.
// The third parameter is array length, which for Uint8 is byte length.
console.log(new Uint8Array(array.buffer, array.byteOffset, array.byteLength).length); // 12

请try 改用以下代码.

const base64String = encode(new Uint8Array(
  pcdRef.current.buffer,
  pcdRef.current.byteOffset,
  pcdRef.current.byteLength
));

Javascript相关问答推荐

JavaScript替换子 node 导致它们更改为[对象HTMLTable SectionElement]

如果没有尾随斜线,托管在收件箱中的React/Vite将无法工作

橡皮擦完全让画布变成白色

React对话框模式在用户单击预期按钮之前出现

JS生成具有给定数字和幻灯片计数的数组子集

vanillajs-datepicker未设置输入值,日期单击时未触发更改事件

Vue:ref不会创建react 性属性

使用续集和下拉栏显示模型属性

Chrome是否忽略WebAuthentication userVerification设置?""

在vercel throws上部署带有gunjs的sveltekit应用无法找到模块./' lib/文本编码'

点击按钮一次有文本出现和褪色,而不是点击两次?(html,CSS,JavaScript)

在Vite React库中添加子模块路径

在grafana情节,避免冲突的情节和传说

为什么Mutations 观察器用微任务队列而不是macrotask队列处理?

如何在ASP.NET中使用Google Charts API JavaScript将条形图标签显示为绝对值而不是负值

禁用.js文件扩展名并从目录导入隐式根index.js时,找不到NodeJS导入模块

如何将数据块添加到d3力有向图中?

邮箱密码重置链接不适用于已部署的React应用程序

Node.js错误: node 不可单击或不是元素

如何在AG-Grid文本字段中创建占位符