在Node.js中,我有一个Buffer(它被存储为MySQL中的blob,并使用sequelize检索)。 我知道这个Buffer是一组16位整数。过去我已经用for循环解析了代码。
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很慢,现在有针对ArrayBuffers的TypedArrays(与Buffers不同)。是否有更好的方法从此缓冲区创建整数数组。
更新1
根据反馈,我做了以下操作。
var arr = new Int16Array(spectrum.buffer)
这让我获得了正确的类型,但是字节被交换了。频谱缓冲区以大端方式存储。
< Buffer e1 d7 e0 b9 e3 52 e2 d5 e2 ed e2 92 e2 d6 e2 97 e3 04 e1 95 e1 e2 > e1 d8 e3 14 e2 fd e1 ed e2 d3 e3 09 e1 9f e2 14 e2 f2 e2 54 e2 1f e2 54 > e2 06 e2 8a ... >
前三个数字显示为-10271、-17952、21219。
然而,它们不应该有那么大的差异,所有三个数字都应该是负数。
第一个数字应该是-7721(二进制补码总是让我感到困惑)。
因此,在node 6上,Int16Array是使用大端还是小端,我该如何处理?