在node.js中,我有一个缓冲区(它被存储为一个blob在mysql中,并使用sequelize检索) 我知道这个Buffer是一个16位整数的数组。在过去,我用for循环解析了代码。Node.js缓冲区到类型数组
var spectrum_buffer = spectrums[idx]["spectrum"];//this is a buffer
var parsed_spectrum = [];
for (var i = 0; i < spectrum_buffer.length/2; i++) {
parsed_spectrum[i] = spectrum_buffer.readInt16BE(i * 2);
}
我读过readInt16BE很慢,现在有阵列缓冲器的typedarrays。 (这与缓冲区不同)。有没有更好的方法从这个缓冲区创建一个int数组。
更新根据反馈我做了以下
var arr = new Int16Array(spectrum.buffer)
这给了我相应的类型,不过字节越来越交换1
。频谱缓冲区以大端存储。
<缓冲E1 D7的e0 B9 E3 52 E2 D5 E2编E2 92 E2 D6 E2 97 E3 04 E1 95 E1 E2> E1 D8 E3 14 E2 FD E1编E2 D3 E3 09 E1 9F E2 14个E2 F2 E2 54 E2 1F E2 54> E2 06 E2 8A ...>
的前三个数字正在说为-10271,-17952,21219
但是他们不应该改变那么多,并且所有三个应该是负面的。
第一个数字应为-7721(二进制补码总是让我困惑)
所以确实Int16Array节点6采用大尾数法或小尾数,如何处理这个问题。
注:https://nodejs.org/api在你的情况,根据需要为您的数据,你会想使用
getInt16
方法并设置字节顺序标志/buffer.html#buffer_buffers_and_typedarray看起来好像是可能的,如果你在填充缓冲区之前创建类型化数组*。 –就这么你知道,我更新了我的答案。如果您需要读取具有特定字节数的数据,则可以使用更低级别的接口。 –