Создание таблицы CRC для AES3 (AES-2003)
Чтобы понять, что я делаю, я пытаюсь обработать субкадры AES/EBU для интерфейса SDI. Это не должно быть слишком важным; давайте отвлечемся от этого.
Страница 12 стандартного документа требует проверки CRC с использованием полинома: G(x) = x^8 + x^4 + x^3 + x^2 + 1 (или x^0).
Документ можно найти здесь: http://tech.ebu.ch/docs/tech/tech3250.pdf
Как вы, вероятно, можете ожидать, я хотел бы создать таблицу CRC для данной формулы. Я наткнулся на фрагмент кода, который использует формулу G(x) = x^8 + x^2 + x^1 + x^0.
Фрагмент кода можно найти здесь: http://www.koders.com/cpp/fid9C544B36B8C41721691790197D38DAC91D2C29EF.aspx?s=crc
Можно ли изменить формулу (см. Измененную версию ниже) для работы с моим AES3 CRC? Будет ли следующая работа?
// x^8 + x^4 + x^3 + x^2 + x^0 or (1)
void make_crc_table( void )
{
int i, j;
unsigned long poly, c;
/* terms of polynomial defining this crc (except x^8): */
static const byte p[] = {0,2,3,4};
poly = 0L;
for ( i = 0; i < sizeof( p ) / sizeof( byte ); i++ )
{
poly |= 1L << p[i];
}
for ( i = 0; i < 256; i++ )
{
c = i;
for ( j = 0; j < 8; j++ )
{
//ZeroDefect: This part has me worried.
c = ( c & 0x80 ) ? poly ^ ( c << 1 ) : ( c << 1 );
}
crctable[i] = (byte) c;
}
}
Любые советы / предложения будут высоко оценены.
ZeroDefect.
1 ответ
Насколько я могу судить, это просто кодирование всех возможных переходов состояний для регистра обратной связи CRC (см. Диаграммы в Википедии) в справочную таблицу.
Похоже, все, что вам нужно сделать, это изменить p[]
массив для учета ваших позиций крана.