You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在TypeScript/JavaScript中实现指定CRC计算?求示例

JavaScript/TypeScript实现指定CRC计算(多项式0xC005)

你需要的CRC多项式是二进制11000000000000101,对应十六进制0xC005(多项式表达式:$x^{16} + x^{15} + x^2 + 1$)。以下是直接可用的JS/TS实现,支持输入十六进制字符串数组(如['01', '06', '00', '01', '00', '10']):

function calculateCRC(hexArray: string[]): string {
    // 定义CRC多项式(二进制11000000000000101 → 十六进制0xC005)
    const POLYNOMIAL = 0xC005;
    let crc = 0x0000; // 初始CRC值,可根据需求调整

    // 遍历每个十六进制字符串,转换为字节值
    for (const hexStr of hexArray) {
        const byte = parseInt(hexStr, 16);
        // 将当前字节与CRC的高8位异或
        crc ^= byte << 8;

        // 对每个比特位进行移位异或操作
        for (let i = 0; i < 8; i++) {
            // 检查最高位是否为1
            if (crc & 0x8000) {
                crc = (crc << 1) ^ POLYNOMIAL;
            } else {
                crc <<= 1;
            }
            // 保留低16位
            crc &= 0xFFFF;
        }
    }

    // 将结果转换为四位十六进制字符串,不足补零,大写输出
    return crc.toString(16).padStart(4, '0').toUpperCase();
}

// 测试示例
const inputHexArray = ['01', '06', '00', '01', '00', '10'];
const crcResult = calculateCRC(inputHexArray);
console.log(`CRC结果: ${crcResult}`);

关键细节说明

  • 多项式转换:你提供的17位二进制除数,在CRC计算中会去掉最高位的1,用剩余16位对应的十六进制0xC005参与运算,这是行业通用的简化方式。
  • 输入兼容:如果你的输入是空格分隔的字符串(如"01 06 00 01 00 10"),可以先通过split(' ')拆分转为数组后传入函数。
  • 定制调整:示例初始CRC设为0x0000,如果业务场景需要不同初始值(如0xFFFF)、输出反转或最终异或操作,直接修改对应逻辑即可。

扩展:直接处理空格分隔的十六进制字符串

如果用户输入是空格分隔的字符串而非数组,可添加一层封装:

function calculateCRCFromHexString(hexString: string): string {
    const hexArray = hexString.trim().split(' ');
    return calculateCRC(hexArray);
}

// 使用示例
const inputStr = '01 06 00 01 00 10';
console.log(calculateCRCFromHexString(inputStr));

内容的提问来源于stack exchange,提问作者EvanChen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 07:55:27