使用Javascript的8位异或校验和

使用Javascript的8位异或校验和,javascript,hash,hex,ascii,checksum,Javascript,Hash,Hex,Ascii,Checksum,我试图模拟一个windows应用程序,它将消息格式化并通过USB通过UART将其发送到显示该消息的设备 应用程序计算一个校验和并将其粘贴在消息之后,否则设备将不接受该命令。校验和不是crc8校验和,但它是什么呢 使用USB监视器,我看到了以下测试用例: ASCII:测试 十六进制:3C4C313E3C50413E3C49423E3C4D413E3C57433E3C4F4D3E546573421 校验和:6A ASCII:Testa 十六进制:3C4C313E3C50413E3C49423E3C4

我试图模拟一个windows应用程序,它将消息格式化并通过USB通过UART将其发送到显示该消息的设备

应用程序计算一个校验和并将其粘贴在消息之后,否则设备将不接受该命令。校验和不是crc8校验和,但它是什么呢

使用USB监视器,我看到了以下测试用例:

ASCII:
测试
十六进制:
3C4C313E3C50413E3C49423E3C4D413E3C57433E3C4F4D3E546573421

校验和:
6A

ASCII:
Testa
十六进制:
3C4C313E3C50413E3C49423E3C4D413E3C57433E3C4F4D3E54657346121

校验和:
0B

ASCII:
再测试一些

十六进制:
3C4C313E3C50413E3C49423E3C4D413E3C57433E3C4F4D3E54657573420736F6D65206D6F7265
校验和:
4A

ASCII:
[SPACE]

十六进制:
3c4c313e3c50413e3c49453e3c4d413e3c57433e3c4f453e20

校验和:
52

返回第一行正确的校验和(CheckSum8 Xor)。我试着模仿这个功能。(注意:当您发送ASCII值时,网站会崩溃,因为它包含
字符。请改用十六进制值!)

目前,我的代码执行以下操作:

let hex = ascii2hex('<L1><PA><IB><MA><WC><OM>Test!') // or one of the other ascii values
let checksum = chk8xor(hex)
console.log(checksum)

function ascii2hex(str) {
  var arr = [];
  for (var i = 0, l = str.length; i < l; i ++) {
    var hex = Number(str.charCodeAt(i)).toString(16);
    arr.push(hex);
  }
  return arr;
}

function chk8xor(byteArray) {
  let checksum = 0x00
  for(let i = 0; i < byteArray.length - 1; i++)
    checksum ^= byteArray[i]
  return checksum
}
let hex=ascii2hex('Test!')//或其他ascii值之一
设校验和=chk8xor(十六进制)
console.log(校验和)
函数ascii2hex(str){
var-arr=[];
对于(变量i=0,l=str.length;i
(javascript)

代码正常工作,但返回错误的校验和。例如,第一个测试用例返回
50
,而不是
6A

我肯定我错过了一些简单的东西。
与我上面提到的网站相比,我的做法有什么不同?

这里不需要任何“十六进制”字符串,只需将ASCII值与校验和进行异或即可:

测试=[
“测试!”,
“Testa!”,
“再测试一点”,
' ',
]
用于(让str进行测试){
设cs=0;
for(str的let char)
cs^=char.charCodeAt(0)
console.log(str,cs.toString(16))

}
太棒了。当然我想的太复杂了。。。多谢各位!这正是我需要的。