galois field galois_mul2转换为javascript?

时间:2018-05-07 11:42:00

标签: javascript c galois-field

我很难将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它的c代码返回167 而在我的代码中它返回423。

出了什么问题?

1 个答案:

答案 0 :(得分:2)

您可能知道,JavaScript中的数字是64位浮点数。但是,即使你有一个UInt8Array对象并将其编入索引,JavaScript也会在将内部8位数转换为double之前将其转换为double,因此value << 1可以成为一个9位数:尝试var arr = new Uint8Array([222]); (arr[0] << 1).toString(2)并注意输出为九长。

要解决此问题,只需使用0xFF进行屏蔽,以保持最低的8位:

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

然后,galois_mul2(222)返回167。