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

时间:2017-02-14 01:07:43

标签: javascript byte dataview low-level arraybuffer

我找到了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的{​​{1}}和setInt16的{​​{1}}似乎无效。我对低级二进制文件的了解非常有限,所以我需要一些帮助。我理解这个功能的大部分内容:

  • setUint8仅保留前16位作为16位
  • 存储
  • setInt8是因为16位整数在空间方面占用2个字节
  • 至于val >> 8,还有评论lol。

我不太清楚为什么只更改对设置有符号值的方法的调用不起作用/我不太确定为什么在设置有符号/无符号值时进程不同。

1 个答案:

答案 0 :(得分:1)

由@Ryan和@Thomas评论,此方法有效。我认为它不起作用,因为我创建的wav文件是纯白噪声。事实证明,虽然这种方法有效,但它可能是以错误的顺序设置字节(这对于wav文件是有问题的,但对于其他处理则不然)。有关详细信息,请参阅Is there anything special I have to do to create a 24-bit WAV file?