Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在JS中将缓冲区的表示形式从int8转换为float32_Javascript_Node.js_Floating Point_Buffer - Fatal编程技术网

Javascript 在JS中将缓冲区的表示形式从int8转换为float32

Javascript 在JS中将缓冲区的表示形式从int8转换为float32,javascript,node.js,floating-point,buffer,Javascript,Node.js,Floating Point,Buffer,在缓冲区中,我有一个从文件读取的字节序列。我需要将它们表示为一个浮点数序列。每个文件数据块的大小约为15KB,所以我不想从这个缓冲区复制到另一个缓冲区。 我读了很多关于Float32Array的文章,例如,。在生成的演示文稿中,数字会发生变化,但它们仍然是整数,并且数字仍然相同 守则: console.log('total points: ' + res.trans.length); console.dir(res.trans); console.log(Float32Array.from(re

在缓冲区中,我有一个从文件读取的字节序列。我需要将它们表示为一个浮点数序列。每个文件数据块的大小约为15KB,所以我不想从这个缓冲区复制到另一个缓冲区。 我读了很多关于Float32Array的文章,例如,。在生成的演示文稿中,数字会发生变化,但它们仍然是整数,并且数字仍然相同

守则:

console.log('total points: ' + res.trans.length);
console.dir(res.trans);
console.log(Float32Array.from(res.trans));
console.log('total float points: ' + Float32Array.from(res.trans).length);
结果是:

total points: 9504
Buffer(9504) [Uint8Array] [ 187,  97,  63, 187, 205, 183, 
Float32Array(9504) [ 187,  97,  63, 187, 205,...
total float points: 9504
在浏览器中:

我建议使用和/或从缓冲区读取所需的float32数字

下面的示例将一些测试浮点数据写入缓冲区并将其读回。您会注意到这些数字并不完全相等,因为我们正在将JavaScript数字(双精度64位二进制格式IEEE 754)转换为32位浮点

const floatSizeBytes = 4;
const floatCount = 10;

const buf = Buffer.alloc(floatCount * floatSizeBytes);
const testFloats = Array.from({ length: floatCount }, (v,k) => Math.random() * 100);

console.log("Test floats:", testFloats);

for(let i = 0; i < floatCount; i++) {
    buf.writeFloatLE(testFloats[i], i * floatSizeBytes);
}

console.log("Buffer (raw):", buf);

function readFloat(buffer, offset, littleEndian = true) {
    if (littleEndian) { 
        return buffer.readFloatLE(offset);
    } else {
        return buffer.readFloatBE(offset);
    }
}

function bufferToFloatArray(buffer, littleEndian = true) {
    const length = Math.floor(buffer.length / floatSizeBytes);
    return Array.from( { length }, (v, k) => readFloat(buffer, k * floatSizeBytes, littleEndian));
}

console.log("Read back floats from buffer:", bufferToFloatArray(buf, true));
const floatSizeBytes=4;
常数floatCount=10;
const buf=Buffer.alloc(floatCount*floatSizeBytes);
const testFloats=Array.from({length:floatCount},(v,k)=>Math.random()*100);
log(“测试浮动:”,测试浮动);
for(设i=0;ireadFloat(buffer,k*floatSizeBytes,littleEndian));
}
log(“从缓冲区读取浮动:”,bufferToFloatArray(buf,true));

谢谢!我不得不使用您的bufferToArray,因为需要进行规范化和其他处理,但它工作得相当快。