2017-01-20 13 views
0

У меня есть чековый принтер с, который я хочу подключить в Delphi 7 по COM порт и работать.COM порт Команды CRC XOR

У меня есть команда, я извлеченный с Serial Port Monitor:

STX "PIRI (781" FS NULL ETX "0B" которым является 02 50 49 52 49 28 37 38 31 1c 00 03 30 42 шестигранной

руководство говорит следующее:

CRC (это две последние цифры после ETX) - контрольная сумма пакета это рассчитывается по следующему алгоритму:. выполнение операции XOR для каждого байт блока, включая ETX, за исключением STX. Данные контрольной суммы занимают два байта и являются символическим представлением числа в виде шестнадцатеричной системы вычислений.

Я попытался вычислить калькулятор ONLINE CRC и вернуть результат 1B и 27 цифр.

  • Как это сделать? Для «Пири (781» FS NULL ETX должно быть 0B
+1

Прекратите использование "онлайн CRC-калькулятор ", ни один из них не реализует этот метод контрольной суммы и не начинает писать код. –

+0

@HansPassant Я пытаюсь понять, с чего начать. Должен ли я найти байт для каждого символа, а затем сделать XOR для него? – SovereignSun

ответ

3

Документация неправильно определяет значение проверки как CRC. Это не так. Это просто исключающее или отмеченных байтов. Исключительно - или 50 49 52 49 28 37 38 31 1c 00 03 - 0b. Затем вы конвертируете 0b в шестнадцатеричный (с верхним регистром B, то есть 0B), и получите 30 42.

+0

Вы правильно. Но как мне это сделать? Я всегда получаю 1B в онлайн-калькуляторах. – SovereignSun

+0

Вы просто используете эксклюзивную или операцию на любом языке, который вы используете. Просто «xor» в Delphi. Как я уже сказал, это не CRC_. Вы не можете использовать онлайн-калькуляторы CRC для вычисления того, что не является CRC. –