Visual c++ 在visualc+中使用fwrite+;2005

Visual c++ 在visualc+中使用fwrite+;2005,visual-c++,file-io,fwrite,Visual C++,File Io,Fwrite,我习惯于使用fwrite将缓冲区的内容写入gcc中的文件。但是,由于某些原因,在Visual C++ 2005中,Frad似乎不能正常工作。 我现在要做的是把一个文本文件转换成二进制文件。该程序在前61行运行良好,但在第62行,它在输出二进制文件中插入了0x0d。基本上,它改变了原来的模式 12 0a 00 到 我检查了缓冲区,内容是正确的,即 buffer[18] = 0x12, buffer[19] = 0x0a, buffer[20] = 0x00 我试着用 fwrite(buffer

我习惯于使用fwrite将缓冲区的内容写入gcc中的文件。但是,由于某些原因,在Visual C++ 2005中,Frad似乎不能正常工作。 我现在要做的是把一个文本文件转换成二进制文件。该程序在前61行运行良好,但在第62行,它在输出二进制文件中插入了0x0d。基本上,它改变了原来的模式

12 0a 00

我检查了缓冲区,内容是正确的,即

buffer[18] = 0x12, buffer[19] = 0x0a, buffer[20] = 0x00
我试着用

fwrite(buffer, 1, length, fout)
其中length是缓冲区内容大小的正确值


这曾经发生在我身上,我不得不将我的代码从fwrite改为WriteFile,这样它才能正常工作。是否有将0x0d插入我的输出的原因?我可以解决这个问题,还是必须尝试改用WriteFile?

问题是因为文件已在文本模式下打开,因此它正在将看到的每个换行符转换为换行符+回车序列

打开文件时,使用文件模式上的b限定符指定二进制模式:

FILE *pFile = fopen(szFilename, "wb");
在VC++中,如果文件模式中未给出tb,则默认转换模式由全局变量
\u fmode
定义。这可以解释编译器之间的差异

在读取二进制文件时也需要这样做。在文本模式下,回车-换行符组合在输入时转换为单行换行符,换行符字符在输出时转换为回车-换行符组合

FILE *pFile = fopen(szFilename, "wb");