0

我正在尝试创建一个具有特定 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

我得到的这个字符串的密件抄送是:0x11

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

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

我试图想出一种方法来查找中间消息部分,该部分将导致密件抄送为 0。

我目前正在使用试错法,但我很确定有更好的方法来做到这一点——我只是还没有想出一个可行的方法。我尝试了一个工具,该工具复制了上面使用的 BCC 方法(在 C# 中),但与我得到的结果不符(叹气)。

4

1 回答 1

3

您可以通过将任何单个字符替换为与当前校验和进行异或的字符来将校验和设置为零。

例如,将 test2 更改为 test#

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

您可能需要注意避免使用某些特殊字符(看起来 0x03 在某些方面很重要,如果字符串使用空终止符,通常也应该避免使用 0x00)。例如,如果您想将一个字符变成 0x03,您可能更愿意添加两个异或为 0x03 的字符,例如 'a' 和 'b'

于 2014-01-24T19:31:24.797 回答