如何在 DataView 中设置带符号的 24 位整数?

How to set a signed 24-bit integer in a DataView?

我找到了 this,但它适用于无符号 24 位整数:

DataView.prototype.setUint24 = function(pos, val) {
    this.setUint16(pos, val >> 8);
    this.setUint8(pos+2, val & ~4294967040); // this "magic number" masks off the first 16 bits
}

简单地将 setUint16 更改为 setInt16 并将 setUint8 更改为 setInt8 似乎不起作用。我对低级二进制内容的了解非常有限,所以我需要一些帮助。我了解大部分功能:

我不太确定为什么仅仅更改对设置有符号值的方法的调用不起作用/我不太确定为什么在设置 signed/unsigned 值时过程不同。

正如@Ryan 和@Thomas 所评论的那样,此方法有效。我认为它不起作用,因为我创建的 wav 文件是纯白噪声。事实证明,虽然此方法有效,但它可能以错误的顺序设置字节(这对 wav 文件有问题,但对其他处理没有问题)。有关详细信息,请参阅