1

Тема: Сложение в один байт

Добрый день, подскажите мне нужно подсчитать CRC сообщения (например: 0x7f 0x10 0x7f 0x37 0x80 0x03 0xB4) и записать его в восьмой байт путем сложения семи байт и дальнейшей инверсии. Я получаю сообщения по 2 байт и при сложении он также выдает сумму в формате 2 байт (0xFFFF). Как можно записать сумму 7 байтов в одном байте?

Вложений в сообщении

Иконка вложения Сложение.png 93.72 кб, скачивался 6 раз, последний раз 2026-03-16 

2

Re: Сложение в один байт

Например так

Вложений в сообщении

Иконка вложения CRC.cfd 1.92 кб, скачивался 26 раз, последний раз 2026-03-16 

3

Re: Сложение в один байт

kirill.gluschenko пишет:

Как можно записать сумму 7 байтов в одном байте?

Для начала, разделите двухбайтовые значения на байты. См. https://forum.canny.ru/viewtopic.php?pid=10812#p10812

wertyh2003 пишет:

Например так

Так работать не будет из за инверсии на выходе блока 17. Кроме того, вопрос был про сложение, а не про побитовое исключающее или.

4

Re: Сложение в один байт

Все понял, спасибо

5 (17-03-2026 16:36:18 отредактировано kirill.gluschenko)

Re: Сложение в один байт

Нет все таки не сработало в файле 8 байт, если считать в 8-битной системе, то сумма будет 18. Тут же получается в 16- битной 1901 сумма. И если сдвинуть 19 вправо и сложить с 01, то ответ будет 1A. Получается что промежуточные переполнения, которые происходят при 8-битном сложении теряются.

Вложений в сообщении

Иконка вложения Сложение_2.png 22.66 кб, скачивался 3 раз, последний раз 2026-03-17 

6

Re: Сложение в один байт

Да, инверсию забыл убрать, я хотел её использовать без НЕ. Если её убрать, то контрольная сумма совпадает с калькулятором CRC. EF Контролька получается.

Вложений в сообщении

Иконка вложения CRC.cfd 1.92 кб, скачивался 18 раз, последний раз 2026-03-17 

7

Re: Сложение в один байт

У меня алгоритм подсчета CRC это сложение каждого байта в 8-битной системе и инверсия получившейся суммы.

8

Re: Сложение в один байт

kirill.gluschenko пишет:

Нет все таки не сработало

1. Вы не применили разделение двухбайтовых значений на байты, как я рекомендовал вам сделать выше.
2. Вы не приложили диаграмму в виде CFD-файла, только скриншот.
3. Вы не привели контрольного примера, например: 0x12 0x34 0x46 0x78 0x9A 0xBC 0xDE 0xF0 -> CRC = 0x28

kirill.gluschenko пишет:

И если сдвинуть 19 вправо и сложить с 01

Байты получившейся суммы складывать не нужно

kirill.gluschenko пишет:

Получается что промежуточные переполнения, которые происходят при 8-битном сложении теряются.

Так и должно быть.

wertyh2003 пишет:

Да, инверсию забыл убрать

Вы не заменили побитовое исключающее ИЛИ на арифметическое сложение, которое указано в условиях задачи.