2017-02-14 35 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?

相關問題