Websocket 客户端到服务器发送 Float32Array - 我做错了什么
Websocket Client to Server sending a Float32Array - what am I doing wrong
我正在将类型化的 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);
我正在将类型化的 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);