node.js에 나는 버퍼가 있습니다 (이것은 mysql에 blob로 저장되고 sequelize를 사용하여 검색되었습니다) 이 버퍼는 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가 느리며 arraybuffers에 대한 typedarrays가 있다는 것을 읽었습니다. (이는 Buffers와 다릅니다). 이 버퍼로부터 int의 배열을 작성하는보다 좋은 방법이 존재합니다.
업데이트는 1
내가 나에게 바이트 교환지고 있지만 적절한 유형을 제공하는 다음
var arr = new Int16Array(spectrum.buffer)
을했던 의견을 바탕으로. 스펙트럼 버퍼는 빅 엔디안으로 저장됩니다.
< 버퍼 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 1 층 E2 54> E2 06 E2의 8A ...>
처음 세 숫자는 가로 질러오고있다 그들이 많은 것을 변화하지 않아야하지만 -10271, -17952, 21219
와 세 가지로해야 부정적이다.
첫 번째 숫자는 (의 보수는 항상 보완 나를 혼란)
그래서 노드에서 Int16Array을한다 (6) 빅 엔디안 또는 리틀 엔디안을 가정하고 나는이 문제를 어떻게 처리하나요 -7721해야한다.
참고 : https://nodejs.org/api 데이터를 저장하기위한 필요에 따라 귀하의 경우에, 당신은
getInt16
방법을 사용하고 엔디안 플래그를 설정할 것 /buffer.html#buffer_buffers_and_typedarray 버퍼를 채우기 전에 입력 된 배열을 만들면 가능합니다. –그냥 알다시피, 나는 내 대답을 업데이 트했습니다.특정 엔디안을 사용하여 데이터를 읽어야 할 경우 사용할 수있는 더 낮은 수준의 인터페이스가 있습니다. –