は私が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
}
は単純に動作していないようsetInt8
ためsetInt16
ためsetUint16
とsetUint8
を変更します。低レベルのバイナリに関する知識は非常に限られているので、私はいくつかの助けが必要です。私はこの機能のほとんどを理解する:
val >> 8
16ビットpos + 2
として格納するだけ最初の16ビットを保持する16ビットの整数として空間- の点で2つのバイトを要するからです
val & ~4294967040
、よくコメントがあります。
署名された値を設定するメソッドへの呼び出しを変更するだけではうまくいかない理由がわかりません/署名されていない値を設定するときにプロセスが異なる理由はわかりません。
'val&〜4294967040'は愚かです。 'val&0xff'ははるかに読みやすくなります。とにかく、 'setUint24'は変更のない符号付き整数に対しても動作するはずです。 – Ryan
@Ryan私は少なくとも、 "署名されていない"代替権の代わりに 'setInt16'と 'setInt8'を使う必要がありますか?私は他の何かが私のコードで間違っていると思います... – maximedupre
いいえ、それは変更なしで動作するはずです。 – Ryan