如何将文本文件以二进制的方式打开?
用c++来实现。即:假设我有一个a.txt的文件,里面的内容为abc,我该如何看到本机是如何用01来表示abc的??...
用c++来实现。
即:假设我有一个a.txt的文件,里面的内容为abc,我该如何看到本机是如何用01来表示abc的?? 展开
即:假设我有一个a.txt的文件,里面的内容为abc,我该如何看到本机是如何用01来表示abc的?? 展开
展开全部
文件文件(以文本方式写的),最好以文本方式读。二进制文件(以二进制方式写的),最好以二进制方式读。不然可能会不正确。
在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;
。
在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)时就结束,二进制方式直到文件结尾。
另外,虚机团上产品团购,超级便宜
#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)时就结束,二进制方式直到文件结尾。
另外,虚机团上产品团购,超级便宜
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询