在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看起來好像是可能的,如果你在填充緩衝區之前創建類型化數組*。 –就這麼你知道,我更新了我的答案。如果您需要讀取具有特定字節數的數據,則可以使用更低級別的接口。 –