自己怎么做彩票网站吗,网站建设流费用,猪八戒网做网站如何付款,顺的网站建设多少钱文本文件和二进制的区别
文本文件和二进制文件的区别主要在于它们的编码方式和数据组织方式。 编码方式#xff1a;文本文件是基于字符编码的文件#xff0c;常见的编码有ASCII编码、UNICODE编码等。这些编码将字符映射到特定的二进制值#xff0c;使得字符可以…文本文件和二进制的区别
文本文件和二进制文件的区别主要在于它们的编码方式和数据组织方式。 编码方式文本文件是基于字符编码的文件常见的编码有ASCII编码、UNICODE编码等。这些编码将字符映射到特定的二进制值使得字符可以在计算机中存储和传输。相比之下二进制文件是基于值编码的文件可以根据具体应用指定某个值的意义这是一个自定义编码的过程。这意味着二进制文件可以存储任何类型的数据包括文本、图像、音频等而文本文件则主要存储字符数据。 数据组织方式文本文件中的数据都是以字符的形式进行组织通常可以逐行或全部读取到一个字符串变量中。这意味着文本文件的内容可以直接被人阅读因为它们是按照特定的字符编码规则进行组织的。二进制文件则以数据的数据类型按照特定格式进行组织必须根据其中保存的信息数据类型进行读取。二进制文件的内容通常无法直接阅读需要特定的软件或程序来解释和显示其内容。 存储和读取文本工具打开一个文件时会读取文件物理上所对应的二进制比特流然后按照所选择的解码方式来解释这个流然后将解释结果显示出来。这意味着即使是文本工具打开二进制文件如果解码和编码不匹配也会出现乱码。相比之下二进制文件的存取与文本文件的存取差不多只是编/解码方式不同而已。 优缺点文本文件的编码基于字符定长译码容易而二进制文件的编码是变长的存储利用率高但译码难一些。文本文件通常更容易被人类阅读和理解而二进制文件则更适合存储大量的数据和复杂的信息如图像、音频等
二进制读写函数
二进制读取函数fread()
size_t fread(void *ptr, size_t size, size_t n, FILE *fp);
1、void *ptr读取内容放的位置指针2、size_t size读取的块大小3、size_t n读取的个数4、FILE *fp 读取的文件指针 二进制读取函数实验代码 #include stdio.h
#include stdlib.hint main(int argc, const char *argv[])
{FILE *fp;char *buff;size_t ret;fp fopen(1.txt, r);if (fp NULL) {perror(fopen);return 0;}buff (char *)malloc(100);if (buff NULL) {return 0;}ret fread(buff, 10, 1, fp);if (ret -1) {perror(fread);fclose(fp);return 0;}printf(buff %s\n, buff);free(buff);fclose(fp);return 0;
} 文件内容 abcdefghi
aaaa
bbb
cc
e 运行结果 buff abcdefghi 注意事项文件指针回到文件头 文件写完后文件指针指向文件末尾如果这时候读读不出来内容。 针对这个问题有两种解决办法 1、利用fclose(函数关闭文件再重新用fopen()函数打开文件 2、调用rewind(FILE *stream)函数。 二进制写入函数fwrite()
size_t fwrite(const void *ptr, size_t size, size_t n, FILE *fp);
1、void *ptr写文件的内容的位置指针2、size_t size写的块大小3、size_t n写的个数4、FILE *fp要写的文件指针 二进制写入函数实验代码 #include stdio.h
#include stdlib.h
#include string.hstruct student {char name[16];int age;char sex[8];
}stu, stu2;int main(int argc, const char *argv[])
{FILE *fp;size_t ret;fp fopen(write.bin, a);if (fp NULL) {perror(fopen);return 0;}strcpy(stu.name, zhangsan);stu.age 49;strcpy(stu.sex, male);ret fwrite(stu, sizeof(stu), 1, fp);if (ret -1) {perror(fwrite);goto end;} else {printf(write struct student success.\n);}/*fclose(fp);fp fopen(write.bin, a);if (fp NULL) {perror(fopen);return 0;}*/rewind(fp);//文件指针回到文件头ret fread(stu2, sizeof(stu), 1, fp);if (ret -1) {perror(fread);goto end;}printf(name %s, age %d, sex %s\n, stu2.name, stu2.age, stu2.sex);
end:fclose(fp);return 0;
} 运行结果 write struct student success.
name zhangsan, age 49, sex male 结构体数组写入二进制文件并读取 实现代码 #include stdio.h
#include stdlib.h
#include string.h#define FNAME stu.bin
#define MODE w
#define NUM 2struct students {char name[16];int age;char sex[8];char phone[11];
}stu[NUM];//定义一个结构体并声明一个结构体数组stuint main(int argc, const char *argv[])
{FILE *fp;int i;//打开文件如果打开失败直接返回if ((fp fopen(FNAME, MODE)) NULL) {perror(fopen);return 0;}//从键盘输入学生信息并且逐一写入到文件,写入失败输出提示信息关闭文件for (i 0; i NUM; i) {scanf(%s%d%s%s, stu[i].name, stu[i].age, stu[i].sex, stu[i].phone);if ((fwrite(stu[i], sizeof(struct students), 1, fp)) -1) {perror(fwrite);goto end;}}/*fclose(fp);//写入完毕关闭文件//重新打开文件如果打开失败直接返回if ((fp fopen(FNAME, MODE)) NULL) {perror(fopen);return 0;}*/rewind(fp);//文件指针回到文件头//以学生为单位从文件中读取信息并输出到屏幕如果读取失败输出提示信息关闭文件for (i 0; i NUM; i) {if ((fread(stu[i], sizeof(struct students), 1, fp)) -1) {perror(fread);goto end;}printf(Student %ss message:\n, stu[i].name);printf(age %d, sex %s, phone %s\n, stu[i].age, stu[i].sex, stu[i].phone);}end:fclose(fp);return 0;
} 运行结果 zhangsan 18 male 15900000000
lisi 19 female 13300909999
Student zhangsans message:
age 18, sex male, phone 15900000000
Student lisis message:
age 19, sex female, phone 13300909999