尝试在 C 中使用二进制模式将字符串存储在文件中

Trying to store a string in a file using binary mode in C

我正在尝试将一个简单的字符串存储在以 wb 模式打开的文件中,如下面的代码所示。现在据我了解,字符串的内容应该存储为 0s1s,因为它是以二进制模式打开的,但是当我在记事本中手动打开文件时,我能够看到确切的字符串存储在文件中,而不是一些二进制数据。出于好奇,我尝试以文本模式阅读这个二进制文件。字符串再次完美地显示在输出中,没有任何随机字符。下面的代码解释了我的观点:

#include<stdio.h>
int main()
{
    char str[]="Testing 123";
    FILE *fp;
    fp = fopen("test.bin","wb");
    fwrite(str,sizeof(str),1,fp);
    fclose(fp);
    return 0;
} 

所以我有3个疑惑:

  1. 为什么在记事本中看到该文件时,它显示的不是一些随机字符而是确切的字符串?
  2. 我们能否以文本模式读取以二进制模式写入的文件,反之亦然?
  3. 与上述问题不完全相关,但我们可以使用 fgetcfputcfgetsfputsfprintf、[=19 等函数吗=] 使用二进制模式和 freadfwrite 等函数使用文本模式 ?

编辑:忘了说我正在 Windows 平台上工作。

  • 在二进制模式下,文件 API 不修改数据,只是直接传递数据。
  • 在文本模式下,一些系统会转换数据。例如 Windows 在文本模式下将 \n 更改为 \r\n
  • 在 Linux 上,二进制模式与文本模式之间没有区别。
  • 记事本将打印文件中的任何内容,因此即使您写入 100% 的二进制数据,您也有可能看到一些可读字符。