2017-02-14 54 views
0

我发现this,但它是无符号24位整数:如何在DataView中设置带符号的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 
} 

简单地改变setUint16setInt16setUint8setInt8似乎并没有工作。我对低级二进制的知识是非常有限的,所以我需要一些帮助。我明白大多数这种功能的:

  • val >> 8只保留前16位来存储作为一个16位
  • pos + 2是因为一个16位整数占用2个字节中的空间
  • 至于术语val & ~4294967040,那么有一个评论大声笑。

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

+1

'val&〜4294967040' is silly; 'val&0xff'会更具可读性。无论如何,'setUint24'应该适用于没有变化的带符号整数。 – Ryan

+0

@Ryan我至少需要使用'setInt16'和'setInt8'来代替它们的“无符号”选择吗?我猜我的代码有其他错误,然后... – maximedupre

+0

不,它应该没有改变。 – Ryan

回答

0

作为@Ryan和@Thomas的评论,此方法的工作原理。我认为这是行不通的,因为我创建的wav文件是纯白色的噪音。事实证明,尽管这种方法有效,但它可能会以错误的顺序设置字节(这对于wav文件是有问题的,但对其他处理没有问题)。有关更多信息,请参阅Is there anything special I have to do to create a 24-bit WAV file?

相关问题