在C中创建位图 – 如何将/ r / n写为1个字节?
我正在尝试在C中创建位图。首先,我想要做的是复制标头和来自其他位图文件的所有像素数据。 问题是数字’10’,当我读它时只有1个字节,但当我写它的2个字节时。 我知道/ r / n的事情,但是如何将Paint保存为1个字符?
我正在以这种方式阅读标题:
unsigned char* header = malloc(54); fread(header, sizeof(unsigned char), 54, file);
并以这种方式写作:
fwrite(img->fileHeader, sizeof(unsigned char), 54, file);
在处理非文本文件时,您必须使用ios::binary
标志,始终:
ofstream myfile; myfile.open ("example.bin", ios::out | ios::app | ios::binary);
如果您正在使用Windows而未在此处打开流时指定ios::binary
标志会发生什么:
读取时, 10
13 10
序列被转换为10
:内存中的数据损坏。 如果数据首先是二进制的,那么你不幸得到这些序列,但它可能会发生
写入时10
被转换为13 10
(CR + LF)。 这更有可能发生并破坏您的输出文件。
注意:即使它已损坏,以文本forms读取并以二进制forms写回来修复损坏(或将13 10
10
替换为10
)