2015-01-05 4 views
0

Я передаю данные следующим образом: [DATA - бит-бит любого размера] [CRC 15 бит].получить 15 бит CRC из любого битового массива любого размера

Как я могу получить 15 бит CRC из любого битового массива размера для обнаружения случайных изменений необработанных данных?

Вот начало кода:

byte crc[15]; 
int data_length = *any size*; 
byte data[data_length]; // for example data = {1,1,1,0,1,0,1,0,1,1,1,1,0,1,0,1,1,1,0,1,0,1,1,1,1,0,1,0,1,1} 
crc = get_crc(crc); 

get_crc - ? 

ответ

2

Как сказал комментатор, ваш пример кода не имеет битов, но байт. Я предполагаю, что вам действительно нужны последние 15 бит из некоторого байтового массива с именем data и что вы проверили, что данные имеют как минимум 2 байта.
подмигнули так просто, как

short crc = (data[data_length - 2] & 0x7f) | data[data_length - 1]; 

Side Примечание: Может быть, вы знаете об этом уже, но 15bit ЗПК не совсем самый надежный вещь (но быстро). Если ваши данные не совсем несущественны, может быть полезен какой-то лучший алгоритм (SHA, или в зависимости от варианта использования, что-то вроде ReedSolomon-encoding etc.etc.)

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