伽罗华域 galois_mul2 转换为 javascript?

galois field galois_mul2 convertion to javascript?

我很难将 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);
    }

如果我在 C 代码中给输入 222 其 return 167 而在我的代码中它是 return 423.

有什么问题?

您可能知道,JavaScript 中的数字是 64 位浮点数。但是,即使你有一个 UInt8Array 对象,并对其进行索引,JavaScript 也会在将它提供给你之前将内部 8 位数字转换为双精度数,因此 value << 1 可以变成 9 -位数:尝试 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) returns 167.