我需要计算消息的CRC并将其放在此消息的开头,以便带有"prepended"补丁字节的消息的最终CRC等于0.我能够在几篇文章的帮助下很容易地做到这一点,但不是我的具体参数.问题是我必须使用给定的CRC32算法来计算内存块的CRC,但是我没有那个"反向"算法来计算那4个补丁字节/'种类的CRC'.给定CRC32算法的参数是:
计算CRC的代码(半字节,表驱动,我希望数据类型定义不言自明):
uint32 crc32tab(uint16* data, uint32 len, uint32 crc)
{
uint8 nibble;
int i;
while(len--)
{
for(i = 3; i >= 0; i--)
{
nibble = (*data >> i*4) & 0x0F;
crc = ((crc << 4) | nibble) ^ tab[crc >> 28];
}
data++;
}
return crc;
}
Run Code Online (Sandbox Code Playgroud)
需要的表是(我认为short [16]表应该包含大[256]表中的每个第16个元素,但是这个表实际上包含了前 16个元素,但这就是它提供给我的方式):
static const uint32 tab[16]=
{
0x00000000, 0x04C11DB7, 0x09823B6E, 0x0D4326D9,
0x130476DC, 0x17C56B6B, 0x1A864DB2, 0x1E475005,
0x2608EDB8, 0x22C9F00F, 0x2F8AD6D6, …Run Code Online (Sandbox Code Playgroud)