怎么把二进制的文件转成ascii码文件啊

hwzwinds 2007-08-15 07:40:10
我刚开始学c++,想把一个二进制的文件转成ascii码的文件,怎么转啊.最好能有代码,谢谢!!
...全文
2388 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
schlafenhamster 2008-08-21
  • 打赏
  • 举报
回复
给你一个例子,请自己该.
//Read Binary File into Buffer
BOOL CWindisavrDoc::ReadBin(CFile *pBinFile)
{
m_nSize =pBinFile->GetLength();
if(m_nSize==0)
{
AfxMessageBox("Binary file has 0 size !",MB_ICONSTOP);
return FALSE;
}
//
if(m_pBuffer) delete []m_pBuffer;
//
m_pBuffer=new BYTE[m_nSize];
if(m_pBuffer==0)
{
AfxMessageBox("Not enough memory !",MB_ICONSTOP);
return FALSE;
}
pBinFile->ReadHuge(m_pBuffer,m_nSize); //
//
return TRUE;
}
//Fill a string array in hex format 象:
//00100:53 49 4A 45 43 54 20 4F 50 20 43 53 50 00 00 00 SIJECT.OP.CSP...
BOOL CWindisavrDoc::StringBin()
{
BYTE *pTmp=m_pBuffer;
CString tmp;
CString prompt;

BYTE comment[40];
//
m_HexStrArray.RemoveAll();
//code behind maxSize will not be shown
int maxSize=2*((theApp.m_FlashEnd+1)+(theApp.m_EePromEnd+1));
if (m_nSize < maxSize) maxSize=m_nSize;
//
int FullRows=maxSize/16;
int PartRow=maxSize%16;
//
for(int rr=0;rr < FullRows ; rr++)
{//
tmp.Format("%05X:", 8*rr);//"10000:" 8Words
prompt+=tmp;
for(int col = 0;col < 16; col++)
{
if((*pTmp>' ') && (*pTmp<'z')) comment[col]=*pTmp;
else comment[col]='.';
tmp.Format("%02X ", *pTmp++);
prompt+=tmp;
}
comment[col]=0;
prompt+=" ";
prompt+=comment;
prompt+="\r\n";
m_HexStrArray.Add(prompt);
prompt.Empty();
}
//
if(PartRow!=0)
{
tmp.Format("%05X:", 8*rr);
prompt+=tmp;
for(int col = 0;col < PartRow; col++)
{
if((*pTmp>' ') && (*pTmp<'z')) comment[col]=*pTmp;
else comment[col]='.';
tmp.Format("%02X ", *pTmp++);
prompt+=tmp;
}
comment[col]=0;
while(col<16)
{// more spaces
prompt+=" ";//3
col++;
}
prompt+=" ";
prompt+=comment;
prompt+="\r\n";
m_HexStrArray.Add(prompt);
prompt.Empty();
}
//
return TRUE;
}
我看你有戏 2008-08-21
  • 打赏
  • 举报
回复
我想告诉楼主

1.文件存在磁盘里面都是 0101 组成的数据信息,可以这么理解

平时说的二进制文件,ascii文件是指你读写文件的方式,是一种方式,到最后在磁盘里面都是 010101的二进制数据信息

也不知道我说的对不对


2.楼主的意思可能是想知道,一个文件在磁盘里面的010101的表现形式吧,就是说把磁盘文件的二进制信息在屏幕上打印出来,类似一些二进制文件查看器的功能吧
schlafenhamster 2008-08-20
  • 打赏
  • 举报
回复
用UltraEdit可以看和复制.
liuyunfei224 2008-08-19
  • 打赏
  • 举报
回复
你们误解楼主的意图了!!
楼主的意思是:打开一个二进制格式的文件,把它的值读出来,再转换成十六进制的形式,最好把转换后的值写入到一个新的文本文件中,这样就可以了。
楼主是吗?
这是我实习时做的第一件事情,先在忘了怎么做的,那位高手能够把转换的代码写出来分享一下吗?
ocean放飞 2007-08-18
  • 打赏
  • 举报
回复
有的ascii要根据位数来判断的,直接转不知道offset是多少
uwinb 2007-08-16
  • 打赏
  • 举报
回复
修下一下:
fwrite(stud,sizeof(struct student),1,fp);
uwinb 2007-08-15
  • 打赏
  • 举报
回复
文件是字节流,你有没有想过判断是一个二进制文件的标准是什么?ASCII码文件是什么意思?

通常我们认为文本文件可能会包含26个小写字母和26个大写字母以及10个数字字符和标点符号,还有一些换行回车、空格空白、制表符等都是看不见的控制字符,它们的ASCII码值不大于125,
但是扩展的ASCII码和UniCode宽字符导致文件类型的并不准确!(一般通过偏移取特征值)

从另一个侧面,我们可以将问题简单化,你应该意识到“写”文件时存在两种截然不同的方式,
而不是强调文件分成这两种不同的类型。所谓的“二进制文件”如果不特指那些可执行文件的话,它的内容可以是很随意的,你根据什么来解释它的那一堆乱码呢?

以二进制方式写入的文件肯定是跟具体的应用联系在一起的,比方说同样是一篇文章,用记事本和用Word编辑会生成完全不同的文件,后者生成的在前者看来是一个不可识别的二进制文件。

//在一个程序中生成一个文件
struct student {int No; char* Name; float Score;} stud;
fwrite(fp,stud,sizeof(struct student)); //生成一个二进制文件

//在另外一个程序中完成转换
fread(fp,stud,sizeof(struct student));
fprintf(fp,"%d,%s,%f\n",stud.No,stud.Name,stud.Score);

//需要注意如果不对字符串特殊编码,它在两个文件中的存储是一样的!
v2002750 2007-08-15
  • 打赏
  • 举报
回复
所有文件都是二进制的,如果每个字节都可以用字符来表示,就成了文本文件
星羽 2007-08-15
  • 打赏
  • 举报
回复


直接把后缀名子改成 .txt
canybox 2007-08-15
  • 打赏
  • 举报
回复
不能.


# i n c l u d e //ASCII字符(文本文件)
35 105 110 99 108 117 100 101 //二进制文件

全部是0101,怎么转??


hwzwinds 2007-08-15
  • 打赏
  • 举报
回复
我再说详细一点吧,我有一个从一个软件中导出的二进制文档,里面的内容都是能用ascii码显示的字符,现在我想把它的内容读出来转成ascii码,再写到txt文件里去.真的不能实现吗?
hwzwinds 2007-08-15
  • 打赏
  • 举报
回复
读入二进制文件,转换成ascii码,然后写入文本文件中,如何实现?
唐巧 2007-08-15
  • 打赏
  • 举报
回复
楼主你对文件的理解有些误区.
ASCII码的文本文件只能存储ASCII字符,(其中大部分是可见字符).但是其实电脑中很多东西是不能简单用文本来显示的.比如一个mp3音乐,你想让它怎么用可见字符显示呢?这些文件我们就用二进制存储.

所以你的问题:"二进制的文件用记事本打开是乱码啊,我要把这个文件转成能看的懂的txt文件,能做到吗?"

答案是"不能".所以根本就不存在这样的函数,也不会有这样的需求.
iambic 2007-08-15
  • 打赏
  • 举报
回复
楼主还是给个例子吧,比如你要处理的二进制文件其字节表示是什么样子,处理后的ascii文件其字节表示又是什么样子。
iambic 2007-08-15
  • 打赏
  • 举报
回复
不过,你能看懂十六进制文件吗?
hwzwinds 2007-08-15
  • 打赏
  • 举报
回复
或者说怎么把一个二进制文件里的信息提取出来,转化成ASCII码,然后再写到一个新的文件里去.
iambic 2007-08-15
  • 打赏
  • 举报
回复
做不到。
hwzwinds 2007-08-15
  • 打赏
  • 举报
回复
二进制的文件用记事本打开是乱码啊,我要把这个文件转成能看的懂的txt文件,能做到吗?
gfxiang 2007-08-15
  • 打赏
  • 举报
回复
没看明白楼主的问题,所有文件都是以二进制形式存储的呀,ascii也是啊
楼主是想把二进制的数转成ascii码的数字?0x10 --> "16"?
iambic 2007-08-15
  • 打赏
  • 举报
回复
请问你理解二进制文件和ascii码文件的区别吗?

64,642

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧