以二进制模式将位/字节转储到文件

时间:2009-06-17 09:38:01

标签: c file

我的代码如下。

FILE *fp;
int a;
fp=fopen("dump.bin","wb");         
a = 0xffafbcdf;
fprintf(fp,"%x",a&0x3ffff);

我试图只转储18个变量a的LSBits。但是文件中转储的值是3bcdf。

我的问题 - 是不是可以转储/ fwrite / fprintf所需的位数不是4(半字节)的倍数到文件?

编辑:

1。)当我检查文件转储的输出时,我意识到,因为我在二进制模式下打开文件,所以我不应该使用fprintf,但我应该使用fwrite

2.。)我在输出中看到的是DF BC 03,它以8位的倍数写入,因此它写入24位(3个字节)但我只对18位感兴趣。但后来我意识到没有文件写入库能够将8位的非倍数写入文件。它总是会添加前导零位来完成字节然后转储它。文件数据的“最小计数单位”是一个字节。

3 个答案:

答案 0 :(得分:1)

正如其他人所说,角色是您可以写入文件的最小尺寸实体。我只想观察在二进制文件上使用fprintf()(或任何其他流输出函数)没有任何问题。

答案 1 :(得分:0)

0x3bcdf0xffafbcdf的18个LSBits,所以它似乎按预期工作。你有什么期望?

答案 2 :(得分:0)

文件以字节(8位)写入,而不是半字节(4位)。

编辑后编辑: fprintf将打印文本,因此您将获得6个字节,其中 - 如果您使用fwrite,您将写入一个int(32位)到文件,但屏蔽记录的值。