CRC32计算JavaScript实现代码

Posted LnEoi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CRC32计算JavaScript实现代码相关的知识,希望对你有一定的参考价值。

网上有的代码会计算出负数,有的不支持中文,这里整合了一下代码。

验证网站: https://www.lammertbies.nl/co...

function CRC32(str, radix = 10) {
  const Utf8Encode = function(string) {
    string = string.replace(/\\r\\n/g, "\\n");
    let text = "";
    for (let n = 0; n < string.length; n++) {
      const c = string.charCodeAt(n);
      if (c < 128) {
        text += String.fromCharCode(c);
      } else if ((c > 127) && (c < 2048)) {
        text += String.fromCharCode((c >> 6) | 192);
        text += String.fromCharCode((c & 63) | 128);
      } else {
        text += String.fromCharCode((c >> 12) | 224);
        text += String.fromCharCode(((c >> 6) & 63) | 128);
        text += String.fromCharCode((c & 63) | 128);
      }
    }
    return text;
  }

  const makeCRCTable = function(){
    let c;
    const crcTable = [];
    for(let n =0; n < 256; n++){
      c = n;
      for(let k =0; k < 8; k++){
        c = ((c&1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));
      }
      crcTable[n] = c;
    }
    return crcTable;
  }

  const crcTable = makeCRCTable();
  const strUTF8 = Utf8Encode(str);
  let crc = 0 ^ (-1);
  for (let i = 0; i < strUTF8.length; i++ ) {
    crc = (crc >>> 8) ^ crcTable[(crc ^ strUTF8.charCodeAt(i)) & 0xFF];
  }
  crc = (crc ^ (-1)) >>> 0;
  return crc.toString(radix);
};

以上是关于CRC32计算JavaScript实现代码的主要内容,如果未能解决你的问题,请参考以下文章

c_cpp 用于计算CRC32和SHA1校验和的源代码

一个简短的CRC32计算程序 C语言

Python中的CRC32计算而不使用库

JavaScript CRC32

在 C/C++ 中计算 32 位 CRC 查找表

关于python实现CRC32Mpeg2的应用和总结