Websocket 客户端到服务器发送 Float32Array - 我做错了什么

Websocket Client to Server sending a Float32Array - what am I doing wrong

本文关键字:错了 什么 Float32Array 客户端 服务器 Websocket      更新时间:2023-09-26

我正在将一个类型的 Float32Array 发送到一个节点 ws 服务器,我得到的值与我发送的值非常不同。使用相同的确切数据,在使用Uint8Array时一切都很好。

客户端归结为这样:

client.connection.send(new Float32Array([1.5,3.14]).buffer);

在服务器端:

var data = new FloatArray32(msg); // data is 
{ 
 '0': 0,
 '1': 0,
 '2': 192,
 '3': 63,
 '4': 195,
 '5': 245,
 '6': 72,
 '7': 64
}

如果我更改要发送到Uint8Array的数组的类型,则接收到的数据是

{'0': 1, '1': 3 }

对于给定类型,这是正常的(我认为?

那么,我是否做错了什么,或者这是ws模块的错误?

数据对我来说是正确的。它是两个小端格式的 32 位浮点数。

要验证:

var buf = new Buffer([0,0,192,63,195,245,72,64]);
console.log(buf.readFloatLE(0));
// outputs: 1.5
console.log(buf.readFloatLE(4));
// outputs: 3.140000104904175

我不确定是否有办法从Buffer直接回到Float32Array,但是如果需要,您可以这样做:

var fa = new Float32Array(buf.length / 4);
for (var i = 0, p = 0; i < buf.length; i += 4, ++p)
  fa[p] = buf.readFloatLE(i);