Как вы, наверное, знаете, числа в 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.