首页
社区
课程
招聘
[旧帖] [原创]将文件以二进制方式读到编辑框 0.00雪花
发表于: 2009-6-1 17:39 1384

[旧帖] [原创]将文件以二进制方式读到编辑框 0.00雪花

2009-6-1 17:39
1384
写了一个函数,有兴趣的可以看一下:
void ReadFromTo(CFile &file,UINT size,CEdit &edit)
{
    UINT nRow=(size-1)/16+1; //所需要的行数
    LPVOID hText = LocalAlloc(LMEM_MOVEABLE|LMEM_ZEROINIT,nRow*LINESIZE); //分配内存
    if (hText == NULL)
        AfxThrowMemoryException();
    LPTSTR lpszText = (LPTSTR)LocalLock(hText); //获取缓冲区指针
    ASSERT(lpszText != NULL);
    CString temp;char ch[16];
    for(UINT i=0;i<nRow;i++)
    {
        temp.Format("%08x",i*16);
        strcat(lpszText,temp); //显示编号
        memset(ch,0,sizeof(ch));
        int  nRead=file.Read(ch,16);  //一次读取16个字节,nRead返回实际读取的字节数,到达文件尾时可能会小于16.
        for(int j=0;j<16;j++) 
        {
            if(j<nRead)
                temp.Format(" %02x",(BYTE)ch[j]);
            else
                temp="   ";//空格代替
            strcat(lpszText,temp);
        }
        strcat(lpszText," ");
        for(j=0;j<16;j++) //有的编译器可能不能识别变量j,那就加个int声明。
        {
            if((ch[j]>32)&&(ch[j]<127))
                temp=ch[j];
            else if((ch[j]>=-96)&&(ch[j]<-1)) //汉字是从160(即-96)开始的,如果想显示汉字,这个就要加上了,否则就注释掉
                temp=ch[j];
            else                     //其他字符都用“.”表示。
                temp=".";
            strcat(lpszText,temp);
        }
        if(i<nRow-1)           //除最后一行,其他都回车
            strcat(lpszText,"\r\n");
    }
    LocalUnlock(hText);
    HLOCAL hOldText = edit.GetHandle();
    ASSERT(hOldText != NULL);
    LocalFree(hOldText);
    edit.SetHandle((HLOCAL)(UINT)(DWORD)hText);
}
调用示例(在对话框中)如:
    CFile file("d:\\123456.txt",CFile::modeRead);
    ReadFromTo(file,file.GetLength(),m_edit);//m_edit为编辑框关联的控件变量
    UpdateData(0);
编辑框输出示例:
00000000 31 32 33 34 35 36 37 38 39 20 c4 e3 ba c3 31 31 123456789.你好11
00000010 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 1111111111111111
00000020 31 31 31 31 31 0d 0a 31 32 33 34 35 36 37 38 39 11111..123456789

说明:1.不要将文件一下都读到编辑框,最好分页面显示。
      2.编辑框的样式要有ES_MULTILINE(Multiline)和ES_WANTRETURN(Want return)两个风格.
      3.其实在关联一个编辑框变量的时候是可以直接使用CString类型的变量,这样代码会变的简单一点。而在这里使用的是CEdit类,虽然麻烦了一点,但是为了应用到单/多文档应用程序的CEditView中,这点麻烦值得。

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 51
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
恩··好东西,顶下哦,哈哈
2009-6-1 17:48
0
游客
登录 | 注册 方可回帖
返回
//