我需要通过arrayBuffer遍历二进制文件并检索1024个浮点集。我正在这样做:

// chunk_size = 1024
// chunk_len = 48
// response_buffer = ArrayBuffer
// response_buffer.byteLength = 49152
for (i = chunk_len; i > 0; i -= 1) {
    switch (i) {
        case (chunk_len):

            // create view from last chunk of 1024 out of 49152 total
            float_buffer = new Float32Array(response_buffer, ((i - 1) * chunk_size));

            // add_data(net_len, float_buffer);
            break;

        case 0:
            break;

        default:
            float_buffer = new Float32Array(response_buffer, ((i - 1) * chunk_size)), chunk_size);
            //add_data(net_len, float_buffer);
            break;
    }
}


我的问题是,如果我在缓冲区的结尾第一次运行时调用了此方法:

// i - 1 = 47 * chunk_size
new Float32Array(response_buffer, ((i - 1) * chunk_size));


在下一次运行时,同一条语句失败:

new Float32Array(response_buffer, ((i - 1) * chunk_size), 1024);


尽管我可以阅读here,但是
我可以做这个:

Float32Array Float32Array(
    ArrayBuffer buffer,
    optional unsigned long byteOffset,
    optional unsigned long length
);


题:
Float32Array ArrayBuffer上声明第一个response_offer视图后,为什么循环失败?

最佳答案

我认为您在“默认”案例的第一行中有一个额外的“)”。

float_buffer = new Float32Array(response_buffer, ((i - 1) * chunk_size)), chunk_size);


应该:

float_buffer = new Float32Array(response_buffer, ((i - 1) * chunk_size), chunk_size);

关于javascript - 如何以“4字节单个”/浮点数/IEEE 754编码数据的二进制数据读取ArrayBuffer?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23850263/

10-12 04:39