JS CRC16/XMODEM

复制代码
const byteData= HexString2Bytes("1A3B4C5D")
let crc = crc16(byteData)
// CRC转换: A185
console.log("CRC转换:",crc)

function crc16(buffer) {
  var crc = 0x0000;
  var odd;

  for(var i = 0; i < buffer.length; i++) {
    crc ^= (buffer[i] << 8)
    for(var j = 0; j < 8; j++) {
      odd = crc & 0x8000;
      crc = crc << 1;
      if(odd) {
        crc = crc ^ 0x1021
      }
    }
  }

  var hi = ((crc & 0xFF00) >> 8); //高位置
  var lo = (crc & 0x00FF); //低位置
  var crcArr = []
  crcArr.push(hi)
  crcArr.push(lo)
  crc &= 0xFFFF
  return crcToString(crcArr, true)
};    

//转为大写String
function crcToString(arr, isReverse) {

  if(typeof isReverse == 'undefined') {
    isReverse = true;
  }

  var hi = arr[0],
  lo = arr[1];
  return padLeft((isReverse ? hi + lo * 0x100 : hi * 0x100 + lo).toString(16).toUpperCase(), 4, '0');

};

function padLeft(s, w, pc) {

    if (pc == undefined) {
        pc = '0';
    }

    for (var i = 0, c = w - s.length; i < c; i++) {
        s = pc + s;
    }

    return s;

};

//十六进制字符串转字节数组
function HexString2Bytes(str) {

    var pos = 0;
    var len = str.length;

    if (len % 2 != 0) {
      return null;
    }

    len /= 2;
    var arrBytes = new Array();

    for (var i = 0; i < len; i++) {
      var s = str.substr(pos, 2);
      var v = parseInt(s, 16);
      arrBytes.push(v);
      pos += 2;

    }

    return arrBytes;
  }
相关推荐
Maimai108085 分钟前
React如何用 @microsoft/fetch-event-source 落地 SSE:比原生 EventSource 更灵活的实时推送方案
前端·javascript·react.js·microsoft·前端框架·reactjs·webassembly
candyTong9 分钟前
Claude Code 的 Edit 工具是怎么工作的
javascript·后端·架构
cen__y1 小时前
Linux12(Git01)
linux·运维·服务器·c语言·开发语言·git
AI人工智能+电脑小能手1 小时前
【大白话说Java面试题 第65题】【JVM篇】第25题:谈谈对 OOM 的认识
java·开发语言·jvm
社交怪人1 小时前
【算平均分】信息学奥赛一本通C语言解法(题号2071)
c语言·开发语言
kyriewen2 小时前
产品经理把PRD写成“天书”,我用AI半小时重写了一遍,他当场愣住
前端·ai编程·cursor
郭涤生2 小时前
不同主机之间网络通信-以太网连接复习
开发语言·rk3588
山居秋暝LS2 小时前
【无标题】RTX00安装paddle OCR,win11不能装最新的,也不能用GPU
开发语言·r语言
卢锡荣2 小时前
单芯通吃,盲插标杆 —— 乐得瑞 LDR6020,Type‑C 全场景互联 “智慧芯”
c语言·开发语言·计算机外设
Xin_ye100862 小时前
C# 零基础到精通教程 - 第七章:面向对象编程(入门)——类与对象
开发语言·c#