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;
}
JS CRC16/XMODEM
聊者说2024-01-16 12:14
相关推荐
消失的旧时光-194343 分钟前
C++ 拷贝构造、拷贝赋值、移动构造、移动赋值 —— 四大对象语义完全梳理一心赚狗粮的宇叔43 分钟前
03.Node.js依赖包补充说明及React&Node.Js项目送秋三十五1 小时前
一次大文件处理性能优化实录————Java 优化过程子春一1 小时前
Flutter for OpenHarmony:音律尺 - 基于Flutter的Web友好型节拍器开发与节奏可视化实现JarvanMo1 小时前
150万开发者“被偷家”!这两款浓眉大眼的 VS Code 插件竟然是间谍亿元程序员1 小时前
大佬,现在AI游戏开发教程那么多,你不搞点卖给大学生吗?Sylvia-girl1 小时前
线程池~~fie88891 小时前
基于MATLAB的转子动力学建模与仿真实现(含碰摩、不平衡激励)未来龙皇小蓝1 小时前
RBAC前端架构-02:集成Vue Router、Vuex和Axios实现基本认证实现lly2024061 小时前
C# 变量作用域