浅谈二进制文件读写和文本文件读写的区别
来源:互联网 发布:linux账号密码忘记了 编辑:程序博客网 时间:2024/06/03 02:16
昨天在看一篇文章的时候,突然想起了这个基础性的问题,自己一直对它的区别不是很清楚,于是今天上午研究下了,分享下自己的理解。(对它很清楚的同学们可以略过此篇文章)
从存储方式来说,文件在磁盘上的存储方式都是二进制形式,所以,文本文件其实也应该算二进制文件。那么他们的区别呢,各自的优缺点呢?不急,我慢慢道来。
先从他们的区别来说,虽然都是二进制文件,但是二进制代表的意思不一样。打个比方,一个人,我们可以叫他的大名,可以叫他的小名,但其实都是代表这个人。二进制读写是将内存里面的数据直接读写入文本中,而文本呢,则是将数据先转换成了字符串,再写入到文本中。下面我用个例子来说明。
我们定义了一个结构体,表示一个学生信息,我们打算把学生的信息分别用二进制和文本的方式写入到文件中。
文本文件
2进制文件里面将111编码成6F,1个字节,这刚好是111的16进制表示,而文本文件中则写成31,31,31用了3个字节,表示111。73 68 69 6E 65 表示shine,之后2进制文件里是几个连续的FE,而文本文件中是38 30......文本文件将浮点数80.000000用了38(表示8) 30(表示0) 2E(表示.) 30(表示0) 30(表示0) 30(表示0) 30(表示0) 30(表示0) 30(表示0),二进制文件用了4个字节表示浮点数00 00 A0 42
从存储方式来说,文件在磁盘上的存储方式都是二进制形式,所以,文本文件其实也应该算二进制文件。那么他们的区别呢,各自的优缺点呢?不急,我慢慢道来。
先从他们的区别来说,虽然都是二进制文件,但是二进制代表的意思不一样。打个比方,一个人,我们可以叫他的大名,可以叫他的小名,但其实都是代表这个人。二进制读写是将内存里面的数据直接读写入文本中,而文本呢,则是将数据先转换成了字符串,再写入到文本中。下面我用个例子来说明。
我们定义了一个结构体,表示一个学生信息,我们打算把学生的信息分别用二进制和文本的方式写入到文件中。
struct Student
{
int num;
char name[20];
float score;
};
我们定义两个方法,分别表示内存写入和文本写入{
int num;
char name[20];
float score;
};
//使用二进制写入
void write_to_binary_file()
{
struct Student stdu;
stdu.num = 111;
sprintf_s(stdu.name,20,"%s","shine");
stdu.score = 80.0f;
fstream binary_file("test1.dat",ios::out|ios::binary|ios::app); //此处省略文件是否打开失败的判断
binary_file.write((char *)&stdu,sizeof(struct Student));//二进制写入的方式
binary_file.close();
}
//文本格式写入
void write_to_text_file()
{
struct Student stdu;
stdu.num = 111;
sprintf_s(stdu.name,20,"%s","shine");
stdu.score = 80.0f;
FILE *fp = fopen("test2.dat","a+"); //此处省略文件是否打开失败的判断
fprintf(fp,"%d%s%f",stdu.num,stdu.name,stdu.score); //将数据转换成字符串(字符串的格式可以自己定义)
fclose(fp);
}
//MAIN函数调用前面两个方法
int _tmain(int argc, _TCHAR* argv[])
{
write_to_binary_file();
write_to_text_file();
return 0;
}
我们来看下,文件里面的格式 2进制文件void write_to_binary_file()
{
struct Student stdu;
stdu.num = 111;
sprintf_s(stdu.name,20,"%s","shine");
stdu.score = 80.0f;
fstream binary_file("test1.dat",ios::out|ios::binary|ios::app); //此处省略文件是否打开失败的判断
binary_file.write((char *)&stdu,sizeof(struct Student));//二进制写入的方式
binary_file.close();
}
//文本格式写入
void write_to_text_file()
{
struct Student stdu;
stdu.num = 111;
sprintf_s(stdu.name,20,"%s","shine");
stdu.score = 80.0f;
FILE *fp = fopen("test2.dat","a+"); //此处省略文件是否打开失败的判断
fprintf(fp,"%d%s%f",stdu.num,stdu.name,stdu.score); //将数据转换成字符串(字符串的格式可以自己定义)
fclose(fp);
}
//MAIN函数调用前面两个方法
int _tmain(int argc, _TCHAR* argv[])
{
write_to_binary_file();
write_to_text_file();
return 0;
}
文本文件
2进制文件里面将111编码成6F,1个字节,这刚好是111的16进制表示,而文本文件中则写成31,31,31用了3个字节,表示111。73 68 69 6E 65 表示shine,之后2进制文件里是几个连续的FE,而文本文件中是38 30......文本文件将浮点数80.000000用了38(表示8) 30(表示0) 2E(表示.) 30(表示0) 30(表示0) 30(表示0) 30(表示0) 30(表示0) 30(表示0),二进制文件用了4个字节表示浮点数00 00 A0 42
通过这里我们可以初见端倪了,二进制将数据在内存中的样子原封不动的搬到文件中,文本格式则是将每一个数据转换成字符写入到文件中,他们在大小上,布局上都有着区别。由此可以看出,2进制文件可以从读出来直接用,但是文本文件还多一个“翻译”的过程,因此2进制文件的可移植性好。
原文链接:http://www.cppblog.com/yg2362/archive/2012/07/12/182956.html
0 0
- 浅谈二进制文件读写和文本文件读写的区别
- 浅谈二进制文件读写和文本文件读写的区别
- 浅谈二进制文件读写和文本文件读写的区别
- 浅谈二进制文件读写和文本文件读写的区别
- 文本文件读取和二进制文件读写的区别
- 文本文件的读写和二进制文件的读写
- windows下文本文件读取和二进制文件读写的区别
- 二进制文件和文本文件读写方法
- 文本文件与二进制文件的读写
- 二进制文件和文本文件及其文件读写
- 掌握文本文件读写的方法 了解二进制文件的读写方法
- 掌握文本文件读写的方法 了解二进制文件的读写方法
- C/C++读写文本文件、二进制文件
- 【转】文本文件,二进制文件,文本读写,二进制读写
- 文本文件和二进制文件的区别
- 文本文件和二进制文件的区别
- 文本文件和二进制文件的区别
- 二进制文件和文本文件的区别
- Linux spi驱动--时钟频率
- Linux共享内存示例,使用信号量同步
- H5技术的潮流----阿冬专栏
- 【Java】try中有return,finally块执行问题
- iOS sqlit3 数据库使用详情
- 浅谈二进制文件读写和文本文件读写的区别
- easyui tree/TreeGrid使用:逐级加载、指定节点刷新、全部展开
- Json序列化
- iOS UITableViewCell的单选
- spring 配置文件属性
- android数据存储之数据库存储技术
- Ubuntu configuration Java environment
- 安全机制之手机移动端验证码炸弹处理策略
- Volley源码解析