[英]Strange text-mode file output behavior
考虑以下代码
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是一个错字。
Windows文本文件希望换行由两个连续的字符表示:0x0D和0x0A。
在C语言中,新行由单个字符表示:0x0A。
因此,在Windows上的C语言中,您有两种打开文件的方式:文本模式或二进制模式。
在二进制模式下,当您写入LineFeed(0x0A)char时,会将单字节(0x0A)附加到文件中。
在文本模式下,每当编写LineFeed(0x0A)char时,两个字节(0x0D和0x0A)都会附加到文件中。
解决方案是使用"wb"
以二进制模式打开文件。
因为您已以“ w”模式打开文件,所以它处于TEXT模式,这意味着\\ n(也称为0x0a)被转换为\\ r \\ n(回车和换行)。 如果仅要将0x0a写入文件,则以二进制模式(“ wb”)打开它。
实际上,这些都不是问题...
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模式打开了您的文件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.