javascript:arraybuffer算法中最快的十六进制字符串是什么?

aemubtdh  于 2021-09-13  发布在  Java
关注(0)|答案(0)|浏览(269)

正在寻找将任意长度的十六进制字符串解析为UINT8数组的性能算法。我特别关心chrome和firefox引擎的使用。
代码段中使用的一种常见方法:

function hex2bytes(string) {
  const normal = string.length % 2 ? "0" + string : string; // Make even length
  const bytes = new Uint8Array(normal.length / 2);
  for (let index = 0; index < bytes.length; ++index) {
    bytes[index] = parseInt(normal.substr(index, 2), 16); // Parse each pair
  }
  return bytes;
}

另一种常见的(不好的)方法是使用正则表达式拆分字符串 /[\dA-F]{2}/gi 并使用 parseInt .
我发现了一个更快的算法,使用 charCodeAt :

function hex2bytes(string) {
  const normal = string.length % 2 ? "0" + string : string; // Make even length
  const bytes = new Uint8Array(normal.length / 2);
  for (let index = 0; index < bytes.length; ++index) {
    const c1 = normal.charCodeAt(index * 2);
    const c2 = normal.charCodeAt(index * 2 + 1);
    const n1 = c1 - (c1 < 58 ? 48 : 87);
    const n2 = c2 - (c2 < 58 ? 48 : 87);
    bytes[index] = n1 * 16 + n2;
  }
  return bytes;
}

我能做得更好吗?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题