2013-05-01 3 views
1

Я новичок в CRC, повышаю и больше разработчика Java. Я пытаюсь использовать библиотеку crc.hpp boost для создания 6-разрядного crc, рассчитанного на основе только двух бит. Во-первых, это возможно?Создание 6-битного crc с использованием boost

Похоже, что теоретический CRC-компьютер может использоваться для обработки определенного количества бит, однако я неясен, как указать 6-битный результат. Помоги пожалуйста.

+3

Почему ваш результат будет больше, чем ваш вход? –

+0

Согласованный вид необычного. Однако я просто следую спецификации заголовка для типа msg. Я спросил его и просто сказал, что мы не можем изменить эту ценность. – user1464251

+0

Этот комментарий полностью меняет вопрос. Вы не пытаетесь вычислить _a_ 6-битный CRC. Похоже, вам нужно вычислить 6-битный CRC, требуемый спецификацией заголовка. Существует много возможных 6-битных CRC с различными полиномами, значениями инициализации, пост-обработкой, упорядочением входных битов и упорядочением выходных битов. Итак, что говорит спецификация? –

ответ

2

Предположим, что ваш вход основан на 2 реальных битов и не два байта, это должно работать:

const int initial_remainder = 0xBAADF00D; 

unsigned char input = 0x3; 

boost::crc_basic<6> checksum(initial_remainder); 
checksum.process_bits(input, 2); 

printf("%i", checksum.checksum()); 

Вам все еще нужно выяснить, что первоначальный остаток должен быть, хотя.

+0

Да, два бита, а не байты, позвольте мне сказать это. Благодаря! – user1464251

+0

Этот код функционирует, но результат моей контрольной суммы кажется неправильным. Я получаю результаты одного персонажа или вообще ничего. Возможно, я все еще что-то упускаю. – user1464251

+0

@ user1464251, если вы не дадите нам ожидаемых результатов, мы не можем полностью ответить на этот вопрос. Вполне возможно, что ваш первоначальный остаток неверен, что вызывает эту проблему. –

3

Это должен быть собственный код, который максимизирует расстояние Хэмминга между четырьмя байтовыми значениями. Это была бы таблица из четырех 8-битовых значений, индексированных двумя битами как число в 0..3.

Набор значений (там 280 таких наборов), который максимизирует минимальное расстояние Хэмминга между любыми двумя из четырех значений: 0x00, 0x4f, 0xb3, 0xfc. Минимальное расстояние Хэмминга равно 5. Высокие два бита этих значений являются двухбитовым индексом по порядку.

+0

Я не уверен, что полностью понимаю, что вы говорите. Я понимаю концепцию расстояния Хэмминга. Поскольку меня интересуют только 2 бита, расстояние Хэмминга 5 превышает мое требование, хорошее. Я не понимаю, что вы имеете в виду, когда указываете «между четырьмя байтовыми значениями». Почему четыре байта? Я четко проиндексирую их. Кроме того, как вы получили 280 таких наборов? – user1464251

+0

2 бита имеют четыре возможных значения. Вы сопоставляете с 8-битными значениями (указанными как 2 бита данных плюс 6-битный CRC), следовательно, сопоставление с четырьмя байтами. –

+0

Поиск по грубой силе включает 280 отсортированных наборов с первым байтом, равным нулю. Вы можете использовать эксклюзивные или все байты с одним и тем же значением для получения других наборов с теми же расстояниями Хэмминга, поэтому на самом деле есть еще множество наборов. В любом случае вам нужен только один набор. –