如何仅在不同时重写二进制文件中的寄存器?
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
或类似的东西。
我需要在二进制文件中写入一个字节,但前提是这是不同的(看起来像来自 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
或类似的东西。