定义的幻数后跟CRC的用途是什么

时间:2019-01-14 16:58:33

标签: c embedded crc

我被安排在一个现有项目中,该项目的最初开发人员已经不在了,而且我没有这个家伙的经验。

因此,在修改代码时,我偶然发现了一个定义的幻数和CRC的部分。

...
// Fill the structure.
oFactoryParams.u16MagicNumber = PARAMMGR_EEPROM_MAGIC_NUMBER_FACTORY_PARAMS;
...

// Calculate CRC.
oFactoryParams.u16CRC = CRCUtilCompute(sizeof(oFactoryParams) - 2, u16Dummy, (UINT8*)&oFactoryParams);

// Write.
u32NbByte = NEEPROMWrite32Bit(...Some params...)
...

这个幻数有什么用?它与CRC有关吗?

谢谢

1 个答案:

答案 0 :(得分:2)

在没有RTTI的语言中,魔术数通常用于断言所传递指针的类型,以检测错误,并与无效的类型转换有关,尤其是在参数以void*传递的情况下。

CRC16通常用于传统通信协议中,用于通过串行线路发送数据后验证数据完整性。

因此,我可以用send(s, &val, sizeof(val));将您的结构直接发送到套接字/ tty的情况,在这种情况下,CRC16可能会有用。

总而言之,这些字段可用于不同级别的断言/检查