定义的幻数后跟 CRC 有什么用
What is the use of a defined magic number followed by a 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有关系吗?
谢谢
幻数通常用于在没有 RTTI 的语言中断言传递的指针的类型以检测错误,与无效的类型转换有关,尤其是当参数作为 void*
.
传递时
CRC16 通常用于传统通信协议中,用于验证通过串行线路发送后的数据完整性。
所以我可以想象你的结构是用 send(s, &val, sizeof(val));
直接发送到 socket/tty 的情况,在这种情况下 CRC16
可能会有用。
总而言之,这些字段可用于 asserts/checks 不同级别
我被放弃了一个现有的项目,最初的开发人员已经不在了,我没有这个人的经验。
因此,在修改代码时,我偶然发现了一个部分,其中我看到了一个已定义的幻数,后跟一个 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有关系吗?
谢谢
幻数通常用于在没有 RTTI 的语言中断言传递的指针的类型以检测错误,与无效的类型转换有关,尤其是当参数作为 void*
.
CRC16 通常用于传统通信协议中,用于验证通过串行线路发送后的数据完整性。
所以我可以想象你的结构是用 send(s, &val, sizeof(val));
直接发送到 socket/tty 的情况,在这种情况下 CRC16
可能会有用。
总而言之,这些字段可用于 asserts/checks 不同级别