考虑以下代码
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是一个错字。
答案 0 :(得分:3)
Windows文本文件希望新行由两个连续的字符表示:0x0D和0x0A。
在C中,新行由单个char表示:0x0A。
因此,在Windows上,在C中,您有两种打开文件的方式:文本模式或二进制模式。
在二进制模式下,当您编写LineFeed(0x0A)字符时,会将单个字节(0x0A)附加到文件中。
在文本模式下,无论何时编写LineFeed(0x0A)字符,都会将两个字节(0x0D和0x0A)附加到文件中。
解决方案是使用"wb"
以二进制模式打开文件。
答案 1 :(得分:0)
因为您已在“w”模式下打开文件,所以它处于TEXT模式,这意味着\ n(即0x0a)被转换为\ r \ n(回车和换行)。 如果您只想将0x0a写入文件,请以二进制模式(“wb”)打开它。
答案 2 :(得分:0)
实际上,这些都不是问题......
FILE * pOutFile;
unsigned char uid;
pOutFile = fopen("OutFile.bin","wb") ; // open a file to write (in binary, <b>not</b> text mode)
uid = 0x0A; //changed from uidl = 0x0A (which didnt set uid)
fprintf (pOutFile, "%c", uid); // Trying to print 0x0A in to the file
我改变了,是你设置了你打印的uidl和 NOT uid。
您可以随时执行以下操作:
fprintf(pOutFile, "%c", 0x0A); or
fprintf(pOutFile, "%c", '\n'); or
fprintf(pOutFile, "\n");
如果你想(最后一个选项可能是你最好的。
我还以wb模式打开了你的文件。