是否有8/16/32校验和算法会产生不等于所有FF或零的结果?

问题描述 投票:0回答:1

我想计算一个校验和(最好是8位),它将得出的结果不是FF也不是0。它将在微控制器的循环日志SPI闪存文件系统中使用。在文件系统中,0表示记录的开始,FF表示已擦除的内存。因此,当我计算校验和时,我不希望结果与记录的开始或未使用的内存混淆。

我看过Fletcher的校验和,但结果仍然可能是0。另外,我虽然使用7位校验和并使用最后一位来确保我没有零或FF结果。

有人知道这样的实现吗?

checksum
1个回答
0
投票

我最终做了以下事情:

uint8_t CrcCalc(uint8_t* buffer, size_t len)
{
    // .... some calculation here with polynomial of own choice
}

uint8_t CrcCalcNon0orFF(uint8_t* buffer, size_t len)
{
    uint8_t tempCrc = CrcCalc(buffer,len);

    if (tempCrc == 0xFF) tempCrc++;
    if (tempCrc == 0) tempCrc++;

    return tempCrc;
}

以上内容也可以扩展到16位和32位问题。

我不确定它是否能满足数学纯粹主义者,但对我有用。

© www.soinside.com 2019 - 2024. All rights reserved.