如何创建一个具有给定值(0)的BCC(块检查字符)的字节数组?

时间:2014-01-24 19:22:50

标签: c# c++ algorithm bit-manipulation error-detection

我正在尝试创建一个具有某个BCC(块检查字符)结果(= 0)的字节数组。

该数组将有序言:

32 02 31 1F 31 1E 32 1F T  E  S  T  :  
32 02 31 1F 31 1E 32 1F 54 45 53 54 3A 20

中间带有可变文本消息(msg):

T  e  s  t  2
54 65 73 74 32

其次是后缀:

1E 37 1F 33 03

我获得此字符串的BCC是:0x11

这是返回此值的算法(C ++):

unsigned char bcc=0;
int index = block.Find(0x03); //ETX
for (int i=0; i<= index;i++)
    bcc ^= block[i];
return bcc;

我正在尝试找到一种方法来查找中间消息部分,这将导致BCC为0。

我目前正在使用试验和错误,但我很确定有更好的方法来做到这一点 - 我只是没有想出一个有效的方法。我采用了一种复制上面使用的BCC方法的工具(在C#中)并且不同意我得到的结果(叹气)。

1 个答案:

答案 0 :(得分:3)

您可以通过使用当前校验和替换字符xor ed的任何单个字符将校验和设置为零。

例如,将test2更改为test#

0x32(#) = 0x23(2)^0x11

您可能需要注意避免某些特殊字符(看起来0x03在某种程度上是重要的,并且在字符串使用空终止时通常也应避免使用0x00)。例如,如果你想将一个字符变成0x03,你可能宁愿添加xor为0x03的两个字符,例如'a'和'b'