计算块检查字符(BCC)以进行串行通信

我通过SerialPort类的.NET通过串口与设备进行通信,并根据我需要计算“块检查字符”的第三方设备规范要求。 我被告知的唯一信息是它是一个异或运算(XOR) ,它必须在所有字符上执行。

所以,如果我有字符串“Bob,001”,那么如何计算BCC?

最有可能是基于字符的异或。 您需要获取它们的样本以进行validation,但大多数校验和通常最终为0。

因此,对于XOR校验和,您将拥有该数据包:

Bob,001X 

其中X是校验和,当你将所有这些字符排在一起时,你很可能得到0。

因此,要计算出X,你只需对“Bob,001”中的所有字符进行异或。 这是因为对于任何N,N xor N总是0。

现在可能是X将是两个hex字符,如果你被允许拥有的是字母数字。 这就是为什么你需要样本数据(所以我们可以解决)或适当的规范(应该由设备制造商提供)。

你所指的实际设备是什么? 可能是网上的信息显示了如何做到这一点。

基于更新:

这是一个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 

校验和的位置可能会有所不同,实际上,它的计算可能会有所不同,尽管这种可能性要小得多。 如果没有样本数据或来自供应商的进一步信息,我认为不能做更多的事情。 粗略搜索互联网没有发现任何技术细节。