JS: Encoding/decoding 优化

JS: Encoding/decoding optimization

我需要 2 个简单的函数来 encode/decode 2 个小数(8 位)变成一个(16 位)。

我是这样写的:

function encode(i, j) {
  const int16 = new Int16Array(1)
  const int8 = new Int8Array(int16.buffer)
  int8[0] = i
  int8[1] = j
  return int16[0]
}

function decode(x) {
  const int16 = new Int16Array(1)
  int16[0] = x
  const int8 = new Int8Array(int16.buffer)
  return [int8[0], int8[1]]
}

但我认为它可以做得更容易,有什么建议吗?

是的。这可以使用按位运算符轻松完成。您的代码使用了系统的 endianness,但此代码始终使用 little-endian.

function encode(i, j) {
  return i | (j << 8);
}

function decode(x) {
  return [x & 0xff, x >> 8];
}