2011-07-15 5 views
1

私は、任意の説明もなく、このコードサンプルを見た:バイナリデータの取り扱いとビット単位のAND

var xhr = new XMLHttpRequest(); 
xhr.open('GET', '/path/to/image.png', true); 

// Trick to pass bytes through unprocessed. 
xhr.overrideMimeType('text/plain; charset=x-user-defined'); 

xhr.onreadystatechange = function(e) { 
    if (this.readyState == 4 && this.status == 200) { 
    var binStr = this.responseText; 
    for (var i = 0, len = binStr.length; i < len; ++i) { 
     var c = binStr.charCodeAt(i); 
     //String.fromCharCode(c & 0xff) 
     var byte = c & 0xff; // byte at offset i 
    } 
    } 
}; 

xhr.send(); 

私はその行var byte = c & 0xff; // byte at offset iがやっているのだろうか?なぜAND0xFFがありますか?このコードはJavaScriptで書かれています。

+0

バイトは '[0、255]'の範囲にあり、 '&0xff'は'%255'と等しく、有効なバイトを返します。 – pimvdb

+0

私はビット演算子を読むことをお勧めします。あなたが毎日それらを使用するつもりはない場合でも、彼らは知って良いことです、そしてIMOについて学ぶことは非常に面白いです。 –

+0

https://developer.mozilla.org/ja/JavaScript/Reference/Operators/Bitwise_Operators –

答えて

3

コードにはバイト値が格納されているようです。どうやら、開発者はcに8ビット(1バイト)を超えるデータが含まれている可能性があると考えました。 0xffでANDとすると、8ビットを超えるデータはすべて削除されます(または少なくとも0に設定されます)。

+0

うーん、私はそれを理解しています。 – Tower

関連する問題