如何将文本文件以二进制的方式打开?

用c++来实现。即:假设我有一个a.txt的文件,里面的内容为abc,我该如何看到本机是如何用01来表示abc的??... 用c++来实现。
即:假设我有一个a.txt的文件,里面的内容为abc,我该如何看到本机是如何用01来表示abc的??
展开
 我来答
du笨鸟
高粉答主

2015-10-11 · 关注我不会让你失望
知道大有可为答主
回答量:2.3万
采纳率:96%
帮助的人:3201万
展开全部
文件文件(以文本方式写的),最好以文本方式读。二进制文件(以二进制方式写的),最好以二进制方式读。不然可能会不正确。
在DFM文件与XML文件互转中,用到的dfm文件必须为文本格式,如果是二进制格式, 处理就会出错。
  但是在处理中如何判断dfm是二进制文件, 而且再将二进制文件转为文本格式呢. ---
  dfm文件二进制格式时, 其文件会加一个文件头, 其中前3个字节来标识其为二进制, 这三个字节分别为:$FF, $0A, $00. 因为这三个字节在文本类型的文件中是不可能存在的,所以可以判断这3个字节就可以了。
  function IsBinDfm(const ADfmFileName: string): Boolean;
  Var
   mBinStream:TMemoryStream;
   mBuff : array [0..2] of byte;
  begin
   mBinStream := TMemoryStream.Create;
   try
   mBinStream.LoadFromFile(ADfmFileName);
   mBinStream.Read(mBuff, 3);
   //前三字节: $FF, $0A, $00
   if (mBuff[0] = $FF) and (mBuff[1] = $0A) and (mBuff[2]= $00) then
   Result := True
   else
   Result := False;
   finally
   mBinStream.Free;
   end;
  end;
  判断出来后, 再将二进制转为文本格式就容易了.Delphi提供了ObjectResourceToText函数.写法如下:
  procedure DfmBin2Txt(ADfmFileName: string);
  Var
   inFileStream: TMemoryStream;
   outFileStream: TFileStream;
  begin
   inFileStream := TMemoryStream.Create;
   inFileStream.LoadFromFile(ADfmFileName);
   try
   outFileStream := TFileStream.Create(ADfmFileName, fmCreate);
   try
   try
   inFileStream.Seek(0, soFromBeginning);
   ObjectResourceToText(inFileStream, outFileStream);
   except
   Raise Exception.Create('This dfm is bin, error on trans bin to txt.');
   end;
   finally
   outFileStream.Free;
   end;
   finally
   inFileStream.Free;
   end;
  end;
匿名用户
推荐于2018-03-20
展开全部
#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)时就结束,二进制方式直到文件结尾。
另外,虚机团上产品团购,超级便宜
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
nscboy
2011-04-11 · TA获得超过1054个赞
知道小有建树答主
回答量:826
采纳率:0%
帮助的人:555万
展开全部
如果使用CFile打开文件,则可以使用CFile::typeBinary参数来保证是以二进制方式打开.
然后读取文件中的数据.
至于后续如何使用这些数据,则需要你自己去完成相应的逻辑了.
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式