Обработка двоичных данных и побитовое И - PullRequest
1 голос
/ 15 июля 2011

Я видел этот пример кода без каких-либо объяснений:

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?Почему AND с 0xFF?Этот код на JavaScript, если это имеет значение.

1 Ответ

3 голосов
/ 15 июля 2011

Код, похоже, хранит значение байта.По-видимому, разработчик полагал, что c может содержать более 8 бит (байт) данных.При AND с 0xff любые данные за пределами 8 бит обрезаются (или по крайней мере устанавливаются в ноль).

...