我正在通过.NET 的 SerialPort 类通过串行与设备通信,并且根据第三方设备规范要求,我需要计算“块检查字符”。我被告知的唯一信息是它是异或运算 (XOR),必须对所有字符执行。
因此,如果我有字符串“Bob,001”,如何计算密件抄送?
我正在通过.NET 的 SerialPort 类通过串行与设备通信,并且根据第三方设备规范要求,我需要计算“块检查字符”。我被告知的唯一信息是它是异或运算 (XOR),必须对所有字符执行。
因此,如果我有字符串“Bob,001”,如何计算密件抄送?
最有可能是基于字符的 XOR。您需要获取它们的样本以进行验证,但大多数校验和通常最终为 0。
因此,对于 XOR 校验和,您将拥有以下数据包:
Bob,001X
其中 X 是校验和,当你对所有这些字符进行异或运算时,你很可能得到 0。
因此,要计算出 X,您只需对“Bob,001”中的所有字符进行异或运算。这是因为对于任何 N,N xor N 始终为 0。
现在,如果您只允许拥有字母数字,那么 X 可能是两个十六进制字符。这就是为什么您需要样本数据(以便我们可以计算出来)或适当的规格(应由设备制造商提供)。
您指的实际设备是什么?网络上可能有显示如何操作的信息。
基于更新:
这是一款 Amadeus Hospitality PMS 设备。不,他们只是说它必须在所有字符上执行。不包括 STX 和 ETX。
您需要获取一些示例数据来确认,但它可能是一个数据流,例如:
Running
Data ChkSum
====== =======
STX 02
B 42 42
o 6f 2d
b 62 4f
, 2c 63
0 30 53
0 30 63
1 31 52
4 52 00
ETX 03
校验和的位置可能会有所不同,实际上,它的计算也可能会有所不同,尽管这种可能性要小得多。如果没有样本数据或供应商提供的更多信息,我认为无法完成更多工作。在互联网上粗略搜索了一下,没有发现任何技术细节。