поле galois galois_mul2 преобразование в javascript?

1

Мне очень сложно преобразовать функцию 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.

Какая проблема?

  • 0
    Тип unsigned char является 8-битным типом.
  • 0
    в JavaScript я использую Uint8Array его также -битного типа
Показать ещё 3 комментария
Теги:
galois-field

1 ответ

2
Лучший ответ

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню