C++中怎样将文本文件用二进制代码打开操作,将二进制数据文件用文本方式打开?
是书上一道题TT实在是搞不掂了……跪求编程帝!QAQ题目是:一个已经建立的文本文件可以用二进制方式打开操作吗?一个二进制文件可以用文本方式打开吗?为什么?写一个程序试一试...
是书上一道题TT实在是搞不掂了……跪求编程帝!QAQ
题目是:
一个已经建立的文本文件可以用二进制方式打开操作吗?一个二进制文件可以用文本方式打开吗?为什么?写一个程序试一试。
谁能帮我写个程序………………请尽快……马上就要交作业了我还想不出来-- 展开
题目是:
一个已经建立的文本文件可以用二进制方式打开操作吗?一个二进制文件可以用文本方式打开吗?为什么?写一个程序试一试。
谁能帮我写个程序………………请尽快……马上就要交作业了我还想不出来-- 展开
2个回答
展开全部
#include<iostream>
#include<iostream>
#include<fstream>
using namespace std;
int main()
{
ofstream otxt("d:\\txt");
ofstream obin("d:\\bin", ios::binary);
unsigned int c;
for(c=0; c<256; c++)
{
otxt<<(char)c;
obin<<(char)c;
if((c + 1) % 10 == 0)
{
/*
写文件有文本格式和二进制格式之分,ios::binary就是二进制
它与文本格式的差别在于, 文本格式会增加一些格式上的信息,比如换行'\n'用文本输出是两个字节0x0Ah,0x0Dh,而如用二进制输出则是0x0Ah
故而 txt的字节数 > bin的字节数
*/
otxt<<'\n';
obin<<'\n';
}
}
otxt.close();
obin.close();
ifstream itxt("d:\\txt", ios::binary);
ifstream ibin("d:\\bin");
//读文件时最大的区别:文本方式在遇到第一个EOF字符(ASCII:26)时就结束,二进制方式直到文件结尾。
char ch;
cout<<"txt as binary: "<<endl;
while(itxt.get(ch))
{
cout<<ch<<" ["<<(int)ch<<"] ";
}
cout<<'\n'<<endl;
cout<<"bin as text: "<<endl;
while(ibin.get(ch))
{
cout<<ch<<" ["<<(int)ch<<"] ";
}
cout<<endl;
itxt.close();
ibin.close();
return 0;
}
文本文件本身跟二进制文件一样,都是由0/1位组成,只是一般所说的文本文件每8位(一字节)必须是可显示的ASCII码范围(0~127),而二进制每8位任意(0~255)。
写文件有文本格式和二进制格式之分,ios::binary就是二进制, 它与文本格式的差别在于,文本格式会增加一些格式上的信息,比如换行'\n'用文本输出是两个字节0x0Ah [10],0x0Dh [13]. 而如用二进制输出则是0x0Ah [10].
而读文件时最大的区别:文本方式在遇到第一个EOF字符(ASCII:26)时就结束,二进制方式直到文件结尾。
#include<iostream>
#include<fstream>
using namespace std;
int main()
{
ofstream otxt("d:\\txt");
ofstream obin("d:\\bin", ios::binary);
unsigned int c;
for(c=0; c<256; c++)
{
otxt<<(char)c;
obin<<(char)c;
if((c + 1) % 10 == 0)
{
/*
写文件有文本格式和二进制格式之分,ios::binary就是二进制
它与文本格式的差别在于, 文本格式会增加一些格式上的信息,比如换行'\n'用文本输出是两个字节0x0Ah,0x0Dh,而如用二进制输出则是0x0Ah
故而 txt的字节数 > bin的字节数
*/
otxt<<'\n';
obin<<'\n';
}
}
otxt.close();
obin.close();
ifstream itxt("d:\\txt", ios::binary);
ifstream ibin("d:\\bin");
//读文件时最大的区别:文本方式在遇到第一个EOF字符(ASCII:26)时就结束,二进制方式直到文件结尾。
char ch;
cout<<"txt as binary: "<<endl;
while(itxt.get(ch))
{
cout<<ch<<" ["<<(int)ch<<"] ";
}
cout<<'\n'<<endl;
cout<<"bin as text: "<<endl;
while(ibin.get(ch))
{
cout<<ch<<" ["<<(int)ch<<"] ";
}
cout<<endl;
itxt.close();
ibin.close();
return 0;
}
文本文件本身跟二进制文件一样,都是由0/1位组成,只是一般所说的文本文件每8位(一字节)必须是可显示的ASCII码范围(0~127),而二进制每8位任意(0~255)。
写文件有文本格式和二进制格式之分,ios::binary就是二进制, 它与文本格式的差别在于,文本格式会增加一些格式上的信息,比如换行'\n'用文本输出是两个字节0x0Ah [10],0x0Dh [13]. 而如用二进制输出则是0x0Ah [10].
而读文件时最大的区别:文本方式在遇到第一个EOF字符(ASCII:26)时就结束,二进制方式直到文件结尾。
展开全部
物理上计算机都是以二进制的方式存储所有类型的信息的,而文本方式只是对二进制信息按一定编码进行转换,是应用层面上的转换过程,所以你可以把任何文件以二进制的方式打开,也可以把任何文件以文本的方式打开。以二进制的方式打开就是直接读物理存储器的信息,而文本方式可以理解为两步:先读取二进制信息再根据你的编码(ASCII。)进行适当的转换,如读取到"00001010"('\n')是要转换成"00001101 000010101"('\r\n'),但从编程角度来说这种转换由C完成.
所以:
文本文件以二进制方式打开:
FILE *pFText;
pFText=fopen("1.txt","wb+"); //注:1.txt如果有"\r\n"不进行转换因为是二进制打开直接读取存储器信息.
二进制文件以文本方式打开:
FILE *pFBin;
pFBin= fopen("1.bmp", "wt+"); //注:1.bmp如果刚好碰到有"\r\n"则要进行转换成"\n".
此时虽然是以文本方式打开的但如果调用printf输出将会是乱码,因为所读取的二制信息用文本编码进行解析时出错.
所以:
文本文件以二进制方式打开:
FILE *pFText;
pFText=fopen("1.txt","wb+"); //注:1.txt如果有"\r\n"不进行转换因为是二进制打开直接读取存储器信息.
二进制文件以文本方式打开:
FILE *pFBin;
pFBin= fopen("1.bmp", "wt+"); //注:1.bmp如果刚好碰到有"\r\n"则要进行转换成"\n".
此时虽然是以文本方式打开的但如果调用printf输出将会是乱码,因为所读取的二制信息用文本编码进行解析时出错.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询