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);
    }

如果我在 c 代码中给出输入 222 它的返回 167,而在我的代码中它的返回 423。

什么问题?

4

1 回答 1

2

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

要解决此问题,只需使用掩码0xFF以保留最低八位:

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

然后,galois_mul2(222)返回 167。

于 2018-05-07T12:07:13.733 回答