我正在尝试创建一个具有某个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#中)并且不同意我得到的结果(叹气)。
答案 0 :(得分:3)
您可以通过使用当前校验和替换字符xor ed的任何单个字符将校验和设置为零。
例如,将test2更改为test#
0x32(#) = 0x23(2)^0x11
您可能需要注意避免某些特殊字符(看起来0x03在某种程度上是重要的,并且在字符串使用空终止时通常也应避免使用0x00)。例如,如果你想将一个字符变成0x03,你可能宁愿添加xor为0x03的两个字符,例如'a'和'b'