我的代码如下。
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位的非倍数写入文件。它总是会添加前导零位来完成字节然后转储它。文件数据的“最小计数单位”是一个字节。
答案 0 :(得分:1)
正如其他人所说,角色是您可以写入文件的最小尺寸实体。我只想观察在二进制文件上使用fprintf()(或任何其他流输出函数)没有任何问题。
答案 1 :(得分:0)
0x3bcdf
是0xffafbcdf
的18个LSBits,所以它似乎按预期工作。你有什么期望?
答案 2 :(得分:0)
文件以字节(8位)写入,而不是半字节(4位)。
编辑后编辑: fprintf将打印文本,因此您将获得6个字节,其中 - 如果您使用fwrite,您将写入一个int(32位)到文件,但屏蔽记录的值。