Преобразование Uint8Array в Short int в JavaScript приводит к отрицательному числу - PullRequest
0 голосов
/ 16 ноября 2018

Я пытаюсь получить exif-данные из JPG, используя JavaScript в браузере. Я использую класс FileReader () и метод readAsArrayBuffer (). Для большинства операций мне нужен Uint8Array, поэтому я использую ArrayBuffer. Я добавил функцию к объектам Uint8Array, когда мне нужно короткое:

const getShort = function(position, bigEndian = true) {
  const int1 = this[position];
  const int2 = this[position+1];
  let result = (int1 << 8) | (int2 & 0xFF);
  if(!bigEndian) {
    let buffer = new ArrayBuffer(16);
    let view = new DataView(buffer);
    view.setInt16(1,result);

    result = view.getInt16(1, true) ;
  }
  return(result);
}

Проблема в том, что при разборе 0110 1001 и 1000 0111 я получаю 1000 0111 0110 1001, и это интерпретируется как -30871 вместо 34665.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...