поле galois galois_mul2 преобразование в javascript? - PullRequest
0 голосов
/ 07 мая 2018

Мне очень трудно конвертировать функцию galois_mul2 в javascript.

У меня есть следующая функция в c

 unsigned char galois_mul2(unsigned char value)
{
    if (value >> 7)
    {
        return ((value << 1) ^ 0x1b);
    }
    else
        return (value << 1);
}

Код Javascript

  galois_mul2( value){


      if (value >> 7)
      {
        return ((value << 1) ^ 0x1b);
      }
      else
          return (value << 1);
    }

Если я дам вход 222, то вернем 167 в коде c тогда как в моем коде его возвращение 423.

В чем проблема?

1 Ответ

0 голосов
/ 07 мая 2018

Как вы, наверное, знаете, числа в JavaScript являются 64-битными числами Но даже если у вас есть объект UInt8Array и индекс для него, JavaScript преобразует внутреннее 8-разрядное число в двойное, прежде чем передать его вам, поэтому value << 1 может стать 9-разрядным числом: try var arr = new Uint8Array([222]); (arr[0] << 1).toString(2) и обратите внимание, что выходной сигнал равен девяти.

Чтобы исправить это, просто замаскируйте 0xFF, чтобы оставить младшие восемь битов:

function galois_mul2(value) {
  if (value >> 7) {
    return ((0xff & (value << 1)) ^ 0x1b);
  }
  return 0xff & (value << 1);
}

Тогда galois_mul2(222) возвращает 167.

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