在Javascript中将一串压缩字节转换为浮点数组

时间:2017-01-27 21:44:26

标签: javascript arrays encoding

上下文

我知道在python中你可以创建一个表示数组的压缩字节的字符串,这样做就像这样:

import numpy as np

np.array([1, 2], dtype=np.int32).tobytes() 
# returns '\x01\x00\x00\x00\x02\x00\x00\x00'

np.array([1, 2], dtype=np.float32).tobytes() 
# returns '\x00\x00\x80?\x00\x00\x00@'

可以使用np.fromstring

对它们进行解码

问题

目前,我的Javascript正在接收一串打包字节,这些字节对浮点数组(即'\x00\x00\x80?\x00\x00\x00@')进行编码,我需要对数组进行解码 - 执行此操作的最佳方法是什么?

(如果它是一个整数数组,我想我可以使用text-encoding来拉取字节,然后只需相加并相加......)

谢谢,

2 个答案:

答案 0 :(得分:3)

首先,您必须将字符串转换为缓冲区,然后在该缓冲区上创建Float32Array。 (可选)展开它以创建正常的Array

str = '\x00\x00\x80?\x00\x00\x00@'

bytes = Uint8Array.from(str, c => c.charCodeAt(0))
floats = new Float32Array(bytes.buffer)

console.log(floats)

console.log([...floats]);

答案 1 :(得分:1)

浮点表示可能因平台而异。使用二进制序列化形式的浮点数来表示从一台机器到另一台机器的数字并不是一个好主意。

也就是说,如果JavaScript使用的编码与数字来源的编码相匹配,这个问题的答案可能可以帮助您:

Read/Write bytes of float in JS