考虑以下代码
FILE * pOutFile;
unsigned char uid;
pOutFile = fopen("OutFile.bin","w") ; // open a file to write
uid = 0x0A;
fprintf (pOutFile,"%c",uid); // Trying to print 0x0A in to the file
但我在文件里得到的指纹是
0x0D 0x0A
这个0x0D是从哪里来的?我是不是遗漏了什么?我必须考虑什么才能防止这种情况发生。
更正: uidl是个错误。
发布于 2014-05-01 04:32:55
Windows文本文件希望用两个连续字符表示新行: 0x0D和0x0A。
在C中,新行由单个char: 0x0A表示。
因此,在Windows上,在C中,有两种打开文件的方法:文本模式或二进制模式。
在二进制模式下,当您编写LineFeed (0x0A)字符时,一个字节(0x0A)被附加到文件中。
在文本模式下,无论何时编写LineFeed (0x0A)字符,都会将两个字节(0x0D和0x0A)追加到文件中。
解决方案是使用"wb"
以二进制模式打开文件。
发布于 2014-05-01 04:35:40
因为您在"w“模式下打开了文件,所以它处于文本模式,这意味着\n的文件(又名0x0a)被翻译成\r\n (回车和行提要)。如果您只希望0x0a写入文件,以二进制模式打开它("wb")。
https://stackoverflow.com/questions/23407646
复制相似问题