NodeJS JavaScript中的校验和XOR计算

rta7y2nd  于 2023-03-01  发布在  Node.js
关注(0)|答案(1)|浏览(204)

我正在建设和UDP服务器与GPS设备通信。它是内置在节点使用数据报。
我有这个数据来计算它的校验和:
>RGP261222120013-3520041-05908923000176700DF4400;ID=4718;#44E6;*24<
GPS设备手册是这样说的:* 校验和:十六进制格式,它是通过XOR所有字符的ASCII码组成的消息开始的〉和结束在最后;(包括),但不包括最后一个星号 *
因此,用于计算校验和的字符串为>RGP261222120013-3520041-05908923000176700DF4400;ID=4718;#44E6;
设备手册给出了一个C#示例,我尝试将其改编为JavaScript:

C#示例

public static string calculateChecksum(string data)
{
  int r;
  int calc = 0;
  byte caracter;
  string calculated_checksum; 
  for (r = 0; r < data.Length; r++) {
    if ((data[r] == '*') && (data[r-1] == ';')) break;
    caracter = (byte)data[r];
    calc = calc ^ (byte)caracter; 
  }
  calculated_checksum = calc.ToString("X"); 
  return calculated_checksum;
}

我的JS适应到目前为止

export const calculateChecksum = (packet) => {
  const len = packet.length;
  const position = packet.indexOf(';*') + 1;
  const packetToCheck = packet.slice(0, position);

  let checksum = 0;

  for (let char of packetToCheck) {
    checksum ^= char.charCodeAt(0);
  };

  return checksum.toString(16);
}

从其他软件中,我得到的对该数据的响应是:
>ACK;ID=4718;#44E6;*26<
计算出的校验和为26(这是正确的结果)。如果服务器发送的校验和错误,设备将重复该消息。
用我的方法,我得到的结果是24。
我真的不知道该怎么向前看。

tkclm6bt

tkclm6bt1#

我误解了文档。我没有删除问题,所以每个人都可以访问该函数。

相关问题