在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