2014-01-24 1 views
0

Я пытаюсь создать массив байтов, который имеет определенный результат BCC (знак проверки столбца) (= 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 

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; 

Я пытаюсь придумать способ найти сообщение в разделе среднего, что приведет к ВСС 0.

В настоящее время я использую пробную версию и ошибку, но я уверен, что есть лучший способ сделать это - я просто не придумал тот, который работает. Я взял качели на инструмент, который повторяет используемый метод BCC (в C#), и это не согласуется с результатами, которые я получаю (вздох).

+0

Показать код, который вы сделали для версии C#, и мы можем помочь вы найдете свою ошибку. –

ответ

3

Вы можете установить контрольную сумму в ноль, заменив любой символ символом xor ed текущей контрольной суммой.

Например, изменение test2 для тестирования #

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

Вам может понадобиться позаботиться, чтобы избежать некоторых специальных символов (это выглядит как 0x03 имеет большое значение в некотором роде, и часто 0x00 также следует избегать в случае строки используют нулевое завершение). Например, если вы хотите сделать символ в 0x03, вы можете вместо этого добавить два символа, xor которых равен 0x03, например 'a' и 'b'

Смежные вопросы