尝试在 C 中使用二进制模式将字符串存储在文件中
Trying to store a string in a file using binary mode in C
我正在尝试将一个简单的字符串存储在以 wb
模式打开的文件中,如下面的代码所示。现在据我了解,字符串的内容应该存储为 0s
和 1s
,因为它是以二进制模式打开的,但是当我在记事本中手动打开文件时,我能够看到确切的字符串存储在文件中,而不是一些二进制数据。出于好奇,我尝试以文本模式阅读这个二进制文件。字符串再次完美地显示在输出中,没有任何随机字符。下面的代码解释了我的观点:
#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个疑惑:
- 为什么在记事本中看到该文件时,它显示的不是一些随机字符而是确切的字符串?
- 我们能否以文本模式读取以二进制模式写入的文件,反之亦然?
- 与上述问题不完全相关,但我们可以使用
fgetc
、fputc
、fgets
、fputs
、fprintf
、[=19 等函数吗=] 使用二进制模式和 fread
、fwrite
等函数使用文本模式 ?
编辑:忘了说我正在 Windows 平台上工作。
- 在二进制模式下,文件 API 不修改数据,只是直接传递数据。
- 在文本模式下,一些系统会转换数据。例如 Windows 在文本模式下将
\n
更改为 \r\n
。
- 在 Linux 上,二进制模式与文本模式之间没有区别。
- 记事本将打印文件中的任何内容,因此即使您写入 100% 的二进制数据,您也有可能看到一些可读字符。
我正在尝试将一个简单的字符串存储在以 wb
模式打开的文件中,如下面的代码所示。现在据我了解,字符串的内容应该存储为 0s
和 1s
,因为它是以二进制模式打开的,但是当我在记事本中手动打开文件时,我能够看到确切的字符串存储在文件中,而不是一些二进制数据。出于好奇,我尝试以文本模式阅读这个二进制文件。字符串再次完美地显示在输出中,没有任何随机字符。下面的代码解释了我的观点:
#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个疑惑:
- 为什么在记事本中看到该文件时,它显示的不是一些随机字符而是确切的字符串?
- 我们能否以文本模式读取以二进制模式写入的文件,反之亦然?
- 与上述问题不完全相关,但我们可以使用
fgetc
、fputc
、fgets
、fputs
、fprintf
、[=19 等函数吗=] 使用二进制模式和fread
、fwrite
等函数使用文本模式 ?
编辑:忘了说我正在 Windows 平台上工作。
- 在二进制模式下,文件 API 不修改数据,只是直接传递数据。
- 在文本模式下,一些系统会转换数据。例如 Windows 在文本模式下将
\n
更改为\r\n
。 - 在 Linux 上,二进制模式与文本模式之间没有区别。
- 记事本将打印文件中的任何内容,因此即使您写入 100% 的二进制数据,您也有可能看到一些可读字符。