Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 计算串行通信的块校验字符(BCC)_C#_.net_Serial Port_Serial Communication - Fatal编程技术网

C# 计算串行通信的块校验字符(BCC)

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”中的所有

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


因此,如果我有字符串“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。我会回复你的,谢谢。