如何仅在不同时重写二进制文件中的寄存器?

How to rewrite an register in binary file only if different?

我需要在二进制文件中写入一个字节,但前提是这是不同的(看起来像来自 Arduino IDE 的 EEPROM.update(a))。我认为有一些函数可以执行此操作,但现在我找不到 it/I不确定是否存在。

到目前为止我已经这样做了:

FILE *fp = fopen("file.dat", "r+");
fseek(fp, (long) address, SEEK_SET);
fread(&value, sizeof(uint8_t), 1, fp);

if (value == val) {
    fclose(fp);
    exit();
}

fseek(fp, (long) address, SEEK_SET);
fwrite(v, sizeof(uint8_t), 1, fp);
fclose(fp);

此代码为示例,并非真实代码。

感谢您的宝贵时间。

fread 使文件指针前进,因此您的 fwrite 不会覆盖偏移量 address 处的字节,而是覆盖后面的字节。在写入之前,您需要再次 fseek 回到偏移量 address

您的示例代码中还有一个 v 未定义。可能应该是 &val 或类似的东西。