二进制文件概念
- 二进制和文本文件的区别
存储的格式不同:文本文件只能存储文本。
计算机内码概念:文本符号在计算机内部的编码(计算机内部只能存储数字0101001…,所以所有符号都要编码) - ASCII码就比较重要,一般大小写字符都由ASCII码表示,0101类似这种来表示,因为计算机寄存器只能支持010101
二进制读写函数介绍
-
函数如下:
size_t fread(void *ptr, size_t size, size_t n, FILE *fp);//从fp读的内容放进ptr中,返回值时读取的个数
void *ptr 读取内容放的位置指针
size_t size 读取的块大小
size_t n 读取的个数
FILE *fp 读取的文件指针
size_t fwrite(const void *ptr, size_t size, size_t n, FILE *fp);//从ptr写入到fp中,其他同上
void *ptr 写文件的内容的位置指针
size_t size 写的块大小
size_t n 写的个数
FILE *fp 要写的文件指针
注意事项:
文件写完后,文件指针指向文件末尾,如果这时候读,读不出来内容。
解决办法:移动指针(后面讲解)到文件头;关闭文件,重新打开
注:成功返回读写的对象个数,出错返回-1,既可以读写文本文件,也可以读写数据文件即二进制文件,效率高 -
二进制读函数的代码如下:
-
执行如下:
注:这个函数更灵活,可以读几个,可以读二进制数据 -
二进制写函数代码如下:
-
执行vim 1.bin后结果如下:
-
在将1.bin文件中的二进制内容写入到stu2中结构体中,代码如下:
- 再次运行上述代码发现输出存在问题,如下:
注:由于前面代码读入1.bin文件中后,文件指针处于文件结尾处,所以在此写入stu2结构体后,输出结果为空,所以数值异常,因此要想解决问题的话,可以再写一个代码,这样文件在打开文件后自动的移至到文件首处