我被安排在一个现有项目中,该项目的最初开发人员已经不在了,而且我没有这个家伙的经验。
因此,在修改代码时,我偶然发现了一个定义的幻数和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有关吗?
谢谢
答案 0 :(得分:2)
在没有RTTI的语言中,魔术数通常用于断言所传递指针的类型,以检测错误,并与无效的类型转换有关,尤其是在参数以void*
传递的情况下。
CRC16通常用于传统通信协议中,用于通过串行线路发送数据后验证数据完整性。
因此,我可以用send(s, &val, sizeof(val));
将您的结构直接发送到套接字/ tty的情况,在这种情况下,CRC16
可能会有用。
总而言之,这些字段可用于不同级别的断言/检查