【发布时间】:2009-06-17 09:38:00
【问题描述】:
我有以下代码。
FILE *fp;
int a;
fp=fopen("dump.bin","wb");
a = 0xffafbcdf;
fprintf(fp,"%x",a&0x3ffff);
我试图只转储变量 a 的 18 个 LSBit。但是文件中转储的值是3bcdf。
我的问题 - 是否无法将不是 4(半字节)的倍数的所需位数转储/fwrite/fprintf 到文件中?
编辑:
1.) 当我检查我的文件转储的输出时,我意识到,由于我以二进制模式打开文件,我不应该使用fprintf,但我应该使用fwrite。
2.) 我在输出中看到的是 DF BC 03 ,它以 8 位的倍数写入,因此它写入 24 位(3 个字节),但我只对 18 位感兴趣。但后来我意识到没有文件写入库能够将非 8 位的倍数写入文件。它总是会添加前导零位来完成字节,然后转储它。文件数据的“最小计数单位”是一个字节。
【问题讨论】:
-
恐怕您不能将部分字节写入文件。你必须写完整的字节。如果您希望另一个进程仅读取 18 位,则需要使其专门读取 18 位,或者将位# 写入文件(例如,在前 4 个字节中)。