2016-10-16 4 views
-1

У меня есть данные из шестнадцатеричных кадров 18005, и я хочу рассчитать crc-16(0xffff) всех кадров одновременно, а затем добавить.Расчет CRC-16 (0xFFFF)

+1

Добро пожаловать в переполнение стека! Вопросы, задающие заполненный код, не относятся к теме для StackOverflow. Вы даже не указали язык, который хотите использовать, поэтому нет никакой надежды на то, что кто-нибудь сможет ответить на этот вопрос с пользой, поскольку он стоит. – Aurora0001

+0

Я использую язык C# –

ответ

1

Ваш CRC не указан надлежащим образом. Вы пытаетесь быть совместимым с каким-то протоколом, который использует 16-битный CRC? Если это так, вам нужно выяснить параметры этого CRC. Вы можете найти here a list of 28 different 16-bit CRC definitions. Один из них может быть одним из них, или это может быть еще один набор параметров.

Не совсем ясно, что означает «(0xffff)» на ваше имя. Начальное значение? Окончательный эксклюзив - или? CRC пустой строки? Что-то другое?

Непонятно, что вы имеете в виду, вычисляя CRC всех кадров «одновременно». Почему вы сказали одновременно?

При добавлении CRC вам также необходимо знать бит или порядок байтов, в которые он должен быть добавлен. Двухбайтовый CRC может быть добавлен в порядке малого или большого порядка.

Update:

Из примера ОЦРА в комментариях, желаемая CRC-16 является CRC-16/CCITT-FALSE from the RevEng catalog. Вы можете использовать crcany для генерации кода C, который вычисляет этот CRC. Он будет генерировать бит-мудрый, байт-мудрый и текстовый код на разных уровнях скорости и сложности. Побитовая рутина генерируемая:

#include <stdint.h> 

unsigned crc16ccitt_false_bit(unsigned crc, void const *data, size_t len) { 
    if (data == NULL) 
     return 0xffff; 
    while (len--) { 
     crc ^= (unsigned)(*(unsigned char const *)data++) << 8; 
     for (unsigned k = 0; k < 8; k++) 
      crc = crc & 0x8000 ? (crc << 1)^0x1021 : crc << 1; 
    } 
    crc &= 0xffff; 
    return crc; 
} 

(Когда buf является NULL, возвращаются начальное значение CRC.)

Вы можете сказать, обследованием из вашего примера потоков, если CRC добавляется в мало или орденом большого двора.

+0

Сэр, у меня есть данные, в которых есть 18005 шестнадцатеричных кадров. Один образец кадра представлен как: –

+0

"AA01004AFF025773429200000000014048A76F64BE211C4648A76F64C0101C5648A76F64C08B137444154CBDBFA2073444154CBDC0570E2C44154CBDC0AE8C5F42700000B48B4296" –

+0

Выше мой образец кадра. У меня есть еще 18004 фреймов, и мне приходится вычислять и добавлять crc-16 бит ко всем кадрам (в конце кадра) одновременно. Мой размер каждого кадра составляет 72 байта, и мне нужно добавить еще два байта crc, у которого есть начальное значение 0xFFFF? –