Dav*_*her 6 c fopen binaryfiles text-files
为了学习C并理解二进制文件和文本文件之间的区别,我试图将一个字符串写入文件,因为两种文件类型都是这样的:
char * string = "I am a string!";
FILE * filePtrA = fopen("/output.txt", "wt");
fwrite(string, strlen(string), 1, filePtrA);
FILE * filePtrB = fopen("/output.bin", "wb");
fwrite(string, strlen(string), 1, filePtrB);
fclose(filePtrA);
fclose(filePtrB);
Run Code Online (Sandbox Code Playgroud)
但是两者"wt"并"wb"正在写为文本文件,其中"wb"应该写为二进制文件.Hex对于这两个文件都是这样的:
49 20 61 6D 20 61 20 73 74 72 69 6E 67 21
Run Code Online (Sandbox Code Playgroud)
为什么会发生这种情况,如何将内容写为二进制文件?
我已经读过操作系统(Mac OS X 10.6 - GCC 4.2)可能无法区分二进制文件和文本文件,但我仍然难以理解为什么十六进制编辑器不会发现任何差异.
所有文件都是二进制的
上下文中"文本文件"和"二进制文件"之间的区别在于fopen标准库可能在文本模式下使用过滤器来读取和写入文件.在二进制模式下,你写的东西总是写的.
我所知道的唯一实际例子是在Windows中,在文本模式下打开文件将使其在Windows样式的行结尾(CRLF "\r\n")和C样式/ Unix样式的行结尾(LF,"\n")之间进行转换.例如,当您在文本模式下打开文件以便在Windows中阅读时,行结尾将显示"\n"在您的程序中.如果您以二进制模式打开它,行结尾将显示"\r\n"在您的程序中.
您还可以使用以下方法检查文件cat:
猫文件名
你应该得到输出: I am a string!