Как создать байтовый массив, который будет иметь BCC (Block Check Character) заданного значения (0)?

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

Решение

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

Например, измените test2 на test #

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

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

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]