Мне очень сложно преобразовать функцию 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.
Какая проблема?
Как вы, наверное, знаете, цифры в 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.
unsigned char
является 8-битным типом.