gpt4 book ai didi

c - 为什么 fwrite() 不在 Mac OS X 上使用 "wb"在 C 中写入二进制文件?

转载 作者:太空狗 更新时间:2023-10-29 17:18:45 25 4
gpt4 key购买 nike

为了学习 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);

但是 "wt""wb" 都是作为文本文件编写的,其中 "wb" 应该作为二进制文件编写文件。两个文件的十六进制显示如下:

49 20 61 6D 20 61 20 73 74 72 69 6E 67 21

为什么会这样,我怎样才能将某些东西写成二进制文件?

我读到操作系统(Mac OS X 10.6 - GCC 4.2)可能无法区分二进制文件和文本文件,但我仍然很困惑为什么十六进制编辑器无法检测到任何差异。

最佳答案

所有文件都是二进制文件。

fopen 上下文中,“文本文件”和“二进制文件”之间的区别在于标准库可能会在文本模式下使用过滤器来读取和写入文件。在二进制模式下,你写的就是写的。

我所知道的唯一实际例子是在 Windows 中,以文本模式打开文件将使它在 Windows 样式的行结尾(CRLF,"\r\n")和 C 之间转换-style/Unix-style line-endings (LF, "\n")。例如,当您在 Windows 中以文本模式打开文件进行阅读时,行结束符将在您的程序中显示为 "\n"。如果您要以二进制模式打开它,行结尾将在您的程序中显示为 "\r\n"


您还可以使用 cat 检查您的文件,例如:

cat filename

您应该得到输出:I am a string!

关于c - 为什么 fwrite() 不在 Mac OS X 上使用 "wb"在 C 中写入二进制文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4158556/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com