c - 如何使用C将数据写入二进制文件

标签 c

我想将 CAN 帧写入二进制文件,包括当前时间戳和 CAN ID,后跟 8 字节数据帧。我的程序中有以下内容,

fwrite("&tm->tm_mon+1", sizeof(tm->tm_mon+1),1,fptr);
fwrite("&tm->tm_mday", sizeof(tm->tm_mday+1),1,fptr);
fwrite("&tm->tm_hour", sizeof(tm->tm_hour+1),1,fptr);
fwrite("&tm->tm_sec", sizeof(tm->tm_sec+1),1,fptr);
fwrite("&frame_rd->can_id", sizeof(frame_rd->can_id),1,fptr);
fwrite("&frame_rd->data", sizeof(frame_rd->data),1,fptr);

这样做正确吗?任何人都可以帮我做这件事。提前致谢。

最佳答案

一些提示(不是完整的解决方案):

事实上,tm->tm_mon 是从零开始的,因此需要 +1 作为月份数字 jan...dec 才有意义,但这并不意味着您必须编写 sizeof(tm->tm_mon+1)

同样,如果你想写它的值并获取它的地址,这并不意味着你必须添加 1。想想你在做什么:你添加这个 1 什么 ??? (就像想想你要测量的尺寸一样。)

如果您想写入此值,则不要将像 printf 这样需要格式字符串(f 表示“打印格式”)的函数与 fwrite(f 表示文件写入)。因此,您不需要提供包含要写入内容的格式字符串,而只需提供需要写入内容的地址。当然,没有任何+1(你会将这个1添加到什么?)

通过这些提示,我希望您能找到答案。请记住,如果没有帮助,请阅读手册!

关于c - 如何使用C将数据写入二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49652485/

相关文章:

c - opencl 映射内存不起作用

c - 尾递归在C语言上真的厉害吗?

c - 删除排序数组中的 double ,然后将 X 放在最后

最长公共(public)子序列的代码未正确显示结果

c - 如何将 Swift 字符串传递给 c 函数?

c - strlen 函数在内部是如何工作的?

c - 代码的系统相关限制

c - 字符串数组 C 的段错误

在C中计算大数的阶乘

c - 如何获取函数的长度(以字节为单位)?