作为对我正在做的事情的一点了解,我正在尝试为 SDI 接口处理 AES/EBU 子帧。这不应该太重要。让我们抽象一下。
标准文档的第 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#L8
可以修改公式(请参阅下面的修改版本)以与我的 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;
}
}
任何提示/建议将不胜感激。
零缺陷。