在C中创建位图-如何将/r/n写入1字节?

在C中创建位图-如何将/r/n写入1字节?,c,bitmap,C,Bitmap,我正在尝试用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

我正在尝试用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);
这样写:

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
标志,会发生什么情况:

13 10
读取时,序列将转换为
10
:内存中损坏的数据。如果数据首先是二进制的,那么获得这些序列是不幸运的,但这是可能发生的

写入时,
10
转换为
13 10
(CR+LF)。这种情况更有可能发生并损坏输出文件


注意:即使它已损坏,以文本形式读取并以二进制形式写回也会修复损坏(或将
13 10
替换为
10

您必须使用
ios::binary
标志打开流。