C# 计算串行通信的块校验字符(BCC)
我通过.NET的SerialPort类与设备进行串行通信,根据第三方设备规范要求,我需要计算“块检查字符”。我得到的唯一信息是,它是一个异或运算(XOR),必须在所有字符上执行C# 计算串行通信的块校验字符(BCC),c#,.net,serial-port,serial-communication,C#,.net,Serial Port,Serial Communication,我通过.NET的SerialPort类与设备进行串行通信,根据第三方设备规范要求,我需要计算“块检查字符”。我得到的唯一信息是,它是一个异或运算(XOR),必须在所有字符上执行 因此,如果我有字符串“Bob,001”,我们将如何计算BCC?很可能是基于字符的异或。您需要获取它们的样本以进行验证,但大多数校验和通常以0结束 因此,对于XOR校验和,您将得到以下数据包: Bob,001X 其中X是校验和,当将所有这些字符XOR在一起时,很可能得到0 所以,要算出X,只需对“Bob,001”中的所有
因此,如果我有字符串“Bob,001”,我们将如何计算BCC?很可能是基于字符的异或。您需要获取它们的样本以进行验证,但大多数校验和通常以0结束 因此,对于XOR校验和,您将得到以下数据包:
Bob,001X
其中X是校验和,当将所有这些字符XOR在一起时,很可能得到0
所以,要算出X,只需对“Bob,001”中的所有字符进行异或运算。这是因为,对于任何N,nxor总是0
现在,如果你只允许使用字母数字,那么X可能是两个十六进制字符。这就是为什么您需要样本数据(这样我们就可以计算出来)或适当的规范(应由设备制造商提供)
您指的实际设备是什么?可能是网络上的信息显示了如何做到这一点
基于更新:
这是一个Amadeus的设备。不,他们所说的是,它必须在所有字符上执行。不包括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
校验和的位置可能会有所不同,事实上,它的计算也可能会有所不同,尽管这种可能性要小得多。我认为如果没有样品数据或供应商提供的进一步信息,就无法完成更多的工作。粗略搜索互联网,没有发现任何技术细节。这是一款Amadeus设备。不,他们所说的是,它必须在所有字符上执行。不包括STX和ETX。我有一个我写过的函数,它正在计算一些东西,只是现在不确定它是否是正确的BCC。我会回复你的,谢谢。