我试图将一个char数组写入C中的BMP文件中。问题是,虽然文件需要0x00值,但似乎C在写入文件时将其解释为字符串的结尾,即NULL字符 我有什么办法可以覆盖它,让C完全依赖我所说的我希望传递的char数量?
用于将标头写入文件的代码(此功能在main中执行);
void writeFile(void){
unsigned char bmp1[54] = {
0x42, 0x4D, 0x36, 0x00,
0x0C, 0x00, 0x00, 0x00,
0x00, 0x00, 0x36, 0x00,
0x00, 0x00, 0x28, 0x00,
0x00, 0x00, 0x00, 0x02,
0x00, 0x00, 0x00, 0x02,
0x00, 0x00, 0x01, 0x00,
0x18, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x0C, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00
};
FILE *picFile = fopen("pic.bmp","w");
fprintf(picFile, bmp1, 54);
fclose(picFile);
}
不用fprintf()
写二进制数据,它当然会将其格式字符串解释为字符串。那就是它的作用!
使用fwrite()
,然后使用以二进制模式打开文件"wb"
。
您可以sizeof
用来计算数组的大小,而无需对值进行硬编码:
FILE *picFile = fopen("pic.bmp", "wb");
if(picFile != NULL)
fwrite(bmp1, sizeof bmp1, 1, picFile);
fclose(picFile);
之所以有效,是因为它与的数组声明在同一个范围内bmp1
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句