我想在JavaScript中将音频浮点数组转换为字节字符串。转换为字节后,我期待一个两位数字,然后我可以追加到一个字符串,看看这个例子的输出:
Input: [0.0007124987314455211, 0.0005752402357757092, -0.0010658394312486053, -0.0004562278045341372 ,...]
Output: '\x02\x04\x35...'
但我得到4位数字。如何正确转换为字节?
function floatToByteString(input){
//first convert to 16 bit int array
var intarray = new Int16Array(input.length);
for (var i = 0; i < input.length; i++){
var s = Math.max(-1, Math.min(1, input[i]));
var newint = s < 0 ? s * 0x8000 : s * 0x7FFF;
intarray[i] = newint;
}
//second: convert 16 bit int array to little endian byte string
var bytestring = "";
for (var i = 0; i < input.length; i++){
var thisint = intarray[i]
var bytel = thisint & 0xff;
var byteb = (thisint >> 8) & 0xff;
bytestring += "\\x"+bytel + "" + byteb
}
return bytestring;
}
答案 0 :(得分:0)
您将以这种方式生成非常大的字符串,包含大量不必要的数据。如果它绝对必须是一个字符串,base64会更好。此外,您的临时int数组将使用不必要的内存并减慢速度。
16位值生成4位十六进制值。那么你想要的是4位数字吗?