c++ - 制作 AES3 (AES-2003) 的 CRC 表

标签 c++ crc clearcase-remote-client

为了深入了解我在做什么,我正在尝试处理 SDI 接口(interface)的 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;
    }
}

如有任何提示/建议,我们将不胜感激。

零缺陷。

最佳答案

据我所知,这只是将 CRC 反馈寄存器的所有可能状态转换(参见 Wikipedia 中的图表)编码到查找表中。

看起来您需要做的就是修改 p[] 数组以考虑您的点击位置。

关于c++ - 制作 AES3 (AES-2003) 的 CRC 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11082109/

相关文章:

clearcase - CCRC ClearCase 远程客户端 - 错误 'Config spec for view. . . needs to be synchronized'

clearcase-ucm - CCRC : Synchronize view with stream from command-line

c++ - Operator<< 重载,endl导致segmentation fault

c# - 分布式 key 生成是否有 GUID 替代方案?

crc - 为什么 CRC 多项式被指定为正态、反转等?

bluetooth - 蓝牙规范 AUX_ADV_IND 示例中是否存在勘误?

linux - Clearcase 客户端安装问题 - Linux RHEL5

c++ - (C++) 取消引用的指针在同一个类中调用时返回正确值,从 main 调用时返回 0

c++ - 为什么在对象表达式的上下文中找不到我的构造函数?

c++ - 为指针赋值