javascript - 如何在 DataView 中设置有符号的 24 位整数?

标签 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 更改为 setInt16 并将 setUint8 更改为 setInt8 似乎不起作用。我对低级二进制内容的了解非常有限,所以我需要一些帮助。我了解这个函数的大部分内容:

  • val >> 8 仅保留前 16 位以存储为 16 位
  • pos + 2是因为16位整数占用2个字节的空间
  • 至于val & ~4294967040,有一条评论哈哈。

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

最佳答案

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

关于javascript - 如何在 DataView 中设置有符号的 24 位整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42216219/

相关文章:

javascript - 使用 javascript 在页面加载之前隐藏 HTML 表单

javascript - Controller 操作不显示错误,我看不出出了什么问题

javascript - 在点击事件上禁用侧边栏

Java int 到无符号字节

sharepoint - 如何使用连接查询中的数据在 Sharepoint 中创建数据 View ?

javascript - 使用 javascript 读取 .dat 文件

c# - javascript ASP.NET hiddenfield 从后面的代码中获取值

Perl:一次读取一个字节的二进制文件

python - 寻找一种更优雅的方式将字节转换为位列表

jquery - 从 Slickgrid 中的 Dataview 获取过滤后的数据