我正在尝试创建一个具有特定 BCC( block 校验字符)结果 (=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 的中间消息部分。
我目前正在尝试和错误,但我很确定有更好的方法来做到这一点 - 我只是没有想出一个可行的方法。我试用了一个工具,该工具复制了上面(在 C# 中)使用的 BCC 方法,但它与我得到的结果不一致(叹息)。
最佳答案
您可以通过将任何单个字符替换为与当前校验和进行异或运算的字符来将校验和设置为零。
比如把test2改成test#
0x32(#) = 0x23(2)^0x11
您可能需要注意避免使用某些特殊字符(看起来 0x03 在某些方面很重要,通常也应避免使用 0x00 以防字符串使用空终止)。例如,如果您想将一个字符变成 0x03,您可能更愿意添加两个 xor 为 0x03 的字符,例如 'a' 和 'b'
关于c# - 如何创建一个具有给定值 (0) 的 BCC( block 校验字符)的字节数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21340783/