我将假设“最大”位是指最重要的位。首先,您可以将第一个字节的最高有效位或最低有效位作为最高功率X用于多项式除法。两者都是常用的。这里没有“本性”。这与是否使用表无关。以最低有效位为最高幂X,由于与使用最重要的位相比,软件实现稍快、更简单,因此您会称之为“不是天生”的那个是非常常用的。
其次,比特流既不是“小端”,也不是“大端”。这些术语用于如何整数被分解成一系列字节.这与将比特流解释为多项式无关。您似乎正在寻找的术语是“反映”和“未反映”位流输入和 CRC 输出。 “反映”是指最高的权力X是最低有效位,“未反映”表示它是最高有效位。
如果你看Greg Cook's catalogue of CRCs,你会看到refin=false refout=false或refin=true refout=true作为每个定义的一部分,意思是进来的数据有没有反映,出来的CRC有没有反映,指的是哪里最高的力量X被发现。对于 CRC,整个n-bits 是否反映。在实际实现中,对于输入数据或输出CRC,没有位被翻转。相反,常数 CRC 多项式被反映以匹配数据和 CRC 反射。这是在编写代码时完成的,从不在执行期间完成。 (Greg 的目录中有一个异常值 CRC,CRC-12/UMTS,它有 refin=false refout=true。对于那个,实际上每次都必须反映 CRC 结果。)
鉴于这一切,我试图解释你的问题。 “数据添加小端”是什么意思?这是否意味着使用最低有效位作为最高功率来计算 CRCX(与您的“本性”相反)? “鉴于比特流是小端序,CRC剩余位将出现在最低有效位的最左边”是什么意思?那真的很令人困惑,因为没有最左边的一点,而且我根本不知道你想对剩余位的排列说什么。
我认为我理解并且可以尝试在这里回答的唯一一件事是:“这通常是如何在行业中完成的?”
好吧,正如您从一百多个 CRC 列表中可以看出的那样,几乎没有建立常态。我能说的是,CRC 有一个特殊的属性,它导致在计算 CRC 的位和字节流的末尾对 CRC 位和字节进行“自然”(现在我可以使用这个词)排序。该属性是,如果您正确附加它,则全部的如果消息中没有错误,消息,包括末尾的 CRC,将始终是相同的常数。现在小端和大端是有用的术语,但是只要对于 CRC 本身,而不是位或字节流。正确的顺序是反射 CRC 的小端和非反射 CRC 的大端。 (这假设输入和输出具有相同的反射,因此这不适用于那个异常值 CRC。)
当然,我见过很多使用反射 CRC,但附加到流大端的情况,反之亦然,在这种情况下,对整个消息的 CRC 计算不起作用。没关系,因为检查 CRC 的另一种方法是简单地重复传输前所做的事情,即仅对消息的数据部分计算 CRC,然后从其后面的字节中正确组装 CRC,并且相比这两个值。对于任何其他不具有 CRC 的优雅数学属性的散列,这就是要做的。