在C中创建位图-如何将/r/n写入1字节?
我正在尝试用C语言创建位图。首先,我要做的是从其他位图文件复制头和所有像素数据。问题在于数字“10”,当我读取它时只有1个字节,但当我写入它时只有2个字节。我知道关于/r/n的事情,但是例如Paint如何将其保存为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
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
标志打开流。